2010-12-22 7 views
7

Ich habe ein Ruby-Skript darunter, das Zahlen ab 1 unendlich druckt. Wie kann ich das Skript veranlassen, seine unendliche Ausführung durch einen Interrupt im Terminal wie 'Strg + C' oder 'q' zu stoppen?Wie kann ich einen Benutzer-Interrupt zu einer Endlosschleife hinzufügen?

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

Bei jeder Iteration sollte keine Benutzereingabe angefordert werden.

+0

Eigentlich ist es nicht von 1 weiter drucken. Es wird ab 0 gedruckt. – sawa

Antwort

4

Ich denke, Sie werden die Exit-Bedingung in einem separaten Thread überprüfen:

# 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 

BTW, werden Sie q<Enter> eingeben müssen, um zu beenden, wie das ist, wie die Standardeingabe funktioniert.

+0

Danke Mladen .. !!. Es ist genau das, wonach ich gesucht habe. – boddhisattva

13

Verwenden Kernel.trap ein Signal-Handler für Ctrl-C zu installieren:

#!/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" 
+1

Hallo Peter !! Danke für deine Antwort, aber das war nicht genau das, wonach ich gesucht habe. – boddhisattva