我有一个Ruby脚本,下面有一个无限打印的数字从1开始。我如何通过在'ctrl+c'或键“ q”等终端中的中断停止其无限执行?

a = 0
while( a )
  puts a
  a += 1
  # the code should quit if an interrupt of a character is given
end

通过每次迭代,不应询问用户输入。

有帮助吗?

解决方案

我认为您必须在单独的线程中检查出口条件:

# check for exit condition
Thread.new do
  loop do
    exit if gets.chomp == 'q'
  end
end

a = 0
loop do
  a += 1
  puts a
  sleep 1
end

顺便说一句,您必须输入 q<Enter> 退出,因为这就是标准输入的工作方式。

其他提示

使用kernel.trap安装CTRL-C的信号处理程序:

#!/usr/bin/ruby

exit_requested = false
Kernel.trap( "INT" ) { exit_requested = true }

while !exit_requested
  print "Still running...\n"
  sleep 1
end
print "Exit was requested by user\n"
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top