到目前为止,我已经在Windows XP下的cygwin终端中运行了很多ruby控制台脚本,到目前为止,使用rubyinstaller的ruby 1.9.3-p28都没有问题。

突然之间,我注意到了这种奇怪的行为。 我有以下简单的代码:

while input = gets
  puts input
  puts "ok"
end

这在控制台中没有任何输出。 看来input = gets零件使while循环由于某种原因挂起。 如果我以此方式更改脚本

while true
  puts "ok"
end

虽然循环按预期方式工作,但是如果我添加input = gets刚好低于puts "ok"的位置,则它再次挂起,奇怪的是它甚至在挂起之前都没有向控制台写入“ ok”。 似乎它什么也没做,并且Windows任务管理器显示ruby进程根本没有任何活动。

我也尝试用loop do end循环,但是行为是完全一样的。

相反,如果我完全不使用循环,一切正常。

我所能理解的是,它与一个循环内的stdin gets方法有关。

我希望有人可以帮我调试一下这里到底发生了什么。

更新(更多信息):脚本在Windows命令外壳中正确运行。

===============>>#1 票数:1 已采纳

我用以下方法修复了它:

require 'win32console' if RbConfig::CONFIG['host_os'].include? "mingw32"

我不知道我是否必须在cygwin终端上使用“ win32console” gem,即使在II不输出颜色的情况下,到目前为止,我一直在只使用带有“ colorize” gem的togheter来使颜色起作用。 Windows XP本机命令提示符。

我会在代码顶部对此进行提醒...

  ask by jj_ translate from so

未解决问题?本站智能推荐:

1回复

Cygwin和命令提示符在运行Ruby脚本时的行为差异

我正在学习“艰苦学习Ruby”的练习14 。 如果我在cmd中运行脚本,效果很好,但是我一直在使用Cygwin,因为它更好。 当我使用以下命令在cygwin中运行它时: 我得到以下输出 也就是说,程序启动并立即运行三个STDIN.gets.chomp()命令,一旦通过这些命令
2回复

while循环在C中得到两次()

我知道这个while循环问题很常见,它通常是由输入流中的换行引起的。 但是,我无法修复我的while循环,我真的不明白为什么它会发生在我的情况下。 请考虑以下示例: 忽略这段代码的实现(例如将输入存储为整数而不是字符串等),因为它只是我的case循环的简化版本。 我关心的是,我
2回复

Ruby:在方法内部调用的“ gets”方法将保存Nil而不是Input

好的,这是在终端上运行的Dungeon Text Adventure项目中的。 当用户说他想“向北”时,它将拆分字符串:第一个单词检查方法,第二个单词检查参数。 那在其他地方发生,我复制粘贴了两种方法,这给了我以下问题: 当它调用go(north)并且north不是有效的连接时,它
1回复

使用“获取”从另一个运行ruby脚本,奇怪的错误

我编写了一个ruby脚本,然后调用另一个ruby脚本。 被调用者脚本非常长并且有很多“获取”输入。 所以我所做的是打开我的unix终端,调用调用者脚本,然后执行以下简单的操作: calleeScript.rb已简化为执行此操作: 但它只是给了我一个错误,就像它无法处理获取
1回复

Ruby gets方法以256个字符截断我的输入

我试图在Ruby中输入一个长字符串(> 256个字符但通常<512): 出于某种愚蠢的原因,它总是截断输入以仅保留256个字符(在chomp之前)。 我确认Ruby接受更长的字符串,并且Windows 7命令行控制台也接受字符串> 256个字符。 我找不到任何提到
2回复

Ruby gets方法在从控制台传递参数时抛出异常

我从以下代码中体验过一些ODD行为: 当我传递true以在执行时将$DEBUG设置为true时,我从name = gets得到一个错误,我不明白为什么。 如果我不通过命令行传递参数一切正常。 这是错误输出: 如果我需要,我可以发布类定义,但我认为这不是问题的一部分。
1回复

为什么在Ruby中返回零

我有一个简单的方法 无论何时我运行代码,我都会收到第一个提示,其中我插入了电影的名称,但是当我按下回车键时,第二个打印被调用,给我这个消息。 该文件已写入但我无法在文本文件中插入任何内容。 我的逻辑有什么问题,我该如何解决这个问题? 我在RubyMine中使用irb和Ubun
2回复

Ruby跳过使用参数获取之前的内容

我有一个使用gets参数的多行输入,效果很好。 问题是它跳过了我的下一个... 前两行按预期运行(我可以输入多行文本,直到键入完成并按Enter)。 然后打印“一行响应:”并退出程序。 我从来没有输入过oneLine。 为什么会这样呢?
5回复

在gets()中从Ruby中的TCP套接字恢复

我正在读取TCP套接字上的输入行,类似于: 如果端点在getline()运行时终止连接,则gets()挂起。 我该如何解决这个问题? 是否有必要进行非阻塞或定时I / O?
1回复

在块中使用ruby'gets'

该代码应按以下方式工作: 我不会在其他任何地方重用'num'变量,所以我不想将gets分配给变量并在块中使用它,如下所示: 在控制台中有时起作用,有时则不起作用。 如果没有,我就会陷入该功能。 是非法使用还是我应该以某种方式包装gets ?