有没有一种方法可以在ruby中获得一次按键?

有没有一种方法可以在ruby中获得一次按键?,ruby,Ruby,我需要一种方法来检查键盘,看看是否有任何一个键被按下,如果是的话,得到键,如果没有,离开去做我的事情。我只需要检查大约六把钥匙。我会经常回来检查(也就是说,这个检查是在程序的一部分,它会无休止地重复[只要程序还在运行]。或者,我想我也可以将它作为一个中断来实现,也就是说,完成循环的其余部分,然后在按下时获取键 因为get和getc都在等待返回,所以它们对我不起作用。我在java和windows中找到了一些示例,但我在Mac上。要立即读取字符,而不给tty设备编辑字符并等待返回的机会,您需要以下内

我需要一种方法来检查键盘,看看是否有任何一个键被按下,如果是的话,得到键,如果没有,离开去做我的事情。我只需要检查大约六把钥匙。我会经常回来检查(也就是说,这个检查是在程序的一部分,它会无休止地重复[只要程序还在运行]。或者,我想我也可以将它作为一个中断来实现,也就是说,完成循环的其余部分,然后在按下时获取键


因为get和getc都在等待返回,所以它们对我不起作用。我在java和windows中找到了一些示例,但我在Mac上。

要立即读取字符,而不给tty设备编辑字符并等待返回的机会,您需要以下内容:

system 'stty cbreak'
$stdout.syswrite 'How now: '
q = $stdin.sysread 1
puts
puts "You typed #{q} it seems."
system 'stty cooked'
若要添加对可用字符的检查,请将其扩展为执行非阻塞读取

def read1maybe
  return $stdin.read_nonblock 1
rescue Errno::EAGAIN
  return ''
end

system 'stty cbreak'
while true
  q = read1maybe
  break if q.length > 0
  puts 'you did not change anything'
  sleep 1
end
puts
puts "You typed #{q} it seems."
system 'stty cooked'

关于更详细的内容,请参阅您可能也会发现有用的内容。

只是为了澄清,我们谈论的是一个shell脚本,而不是web/cgi脚本,对吗?不确定这意味着什么,但如果shell脚本意味着在计算机上,而web/cgi意味着通过internet获取某些内容,那么对shell脚本来说是的。这非常有效。我想说,我永远不会忘记通过阅读Ruby文档发现了这一点。我很高兴我问了。非常感谢。很抱歉,它毕竟不能满足我的需要。虽然它不需要返回,但此例程仍在等待按键。以前我可以检查缓冲区(在Apple上)[)它保存了上一次按下的键的值。如果它是nil,我就开始我的工作,否则我会检索该值并在我的程序中相应地使用它。有没有一种方法可以做到这一行q=$stdin.sysread 1,而不是暂停等待读取q?Urk,我应该更仔细地阅读问题。添加了更新!非常感谢DR,这似乎有效。我会把它放在我的程序里,让你知道。