我有一个类似于:
的Ruby脚本def big_function
puts "starting..."
#does stuff
puts "done"
end
loop do
big_function
end
无限期运行,执行big_function
。
我需要一种方法让用户中断正在运行的脚本,但绝不会在big_function
的中间。如果在big_function
运行时它被中断,则应在big_function
完成时退出。
答案 0 :(得分:5)
Trap这样做:
interrupted = false
trap("INT") { interrupted = true } # traps Ctrl-C
puts 'Press Ctrl-C to exit'
def big_function
puts "starting..."
sleep 1
puts "done"
end
until interrupted do
big_function
end
答案 1 :(得分:2)
你可以使用旗帜。您可以在用户的键触发中进行单独的进程轮询,如果他单击或按下标记更改状态的键。您必须在退出前检查标志。
flag = false
t = Thread.new() {
loop do
flag = gets
break if flag
end
}
def big_function
puts "starting..."
#does stuff
puts "done"
end
loop do
break if flag
big_function
end