3

我需要一种方法来检查键盘,看看是否按下了任何一个键,如果是,请获取该键,如果没有,请离开并继续我的业务。我只需要检查大约六把钥匙。而且我会经常回来检查(即,这个检查是在程序的一部分中不断重复[只要程序正在运行)。或者,我想我也可以将它实现为中断,即,做剩下的循环并在按下时获取密钥。

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

4

1 回答 1

3

要立即读取字符而不给 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'

有关更详细的内容,请参阅标准库 curses 包。您可能还会发现io/console很有用。

于 2012-08-08T20:29:36.543 回答