我有一個Ruby腳本,看起來像:如何在命令行腳本中中斷循環,但僅在方法結束後才中斷循環?
def big_function
puts "starting..."
#does stuff
puts "done"
end
loop do
big_function
end
它運行下去,執行。
我需要一種方式讓用戶中斷正在運行的腳本,但從不在的中間。如果在正在運行時中斷,則應在完成時退出。
我有一個Ruby腳本,看起來像:如何在命令行腳本中中斷循環,但僅在方法結束後才中斷循環?
def big_function
puts "starting..."
#does stuff
puts "done"
end
loop do
big_function
end
它運行下去,執行。
我需要一種方式讓用戶中斷正在運行的腳本,但從不在的中間。如果在正在運行時中斷,則應在完成時退出。
您可以使用標誌。您可以在用戶的按鍵觸發中進行單獨的進程輪詢,並且他可以單擊或按下標記更改狀態的鍵。退出前您必須檢查國旗。
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
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我也是這麼做的。 – 2012-03-09 18:56:09
只是指導他們按Ctrl + C – Candide 2012-03-09 17:20:04
不會它的函數退出之前完成? – applechief 2012-03-09 17:20:55
是的,它會的。也許中斷腳本不是你想要的。誰將使用這個腳本(保存或新手用戶)? – Candide 2012-03-09 17:25:41