2010-12-22 16 views
7

Aşağıda 1'den başlayarak sayıları sonsuza kadar basan bir ruby ​​senaryosu var. Komut dosyası, terminalde 'Ctrl + C' veya 'q' tuşu gibi bir kesinti ile sınırsız çalışmasını nasıl durdurabilir?Sonsuz bir döngüye nasıl kullanıcı kesmesi ekleyebilirim?

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

Her yinelemeyle, kullanıcı girdisi sorulmamalıdır.

+0

Aslında, ileriye 1'den yazdırmıyor. 0'dan başlayarak yazdırır. – sawa

cevap

4

Sana ayrı bir konu çıkış durumunu kontrol etmek zorunda kalacak düşünüyorum: o giriş nasıl çalıştığını standarttır olarak

# 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, sen çıkmak için q<Enter> girmek zorunda kalacaktır.

+0

Teşekkürler Mladen .. !! Sadece aradığım şey. – boddhisattva

13

Kullanım Kernel.trap Ctrl-C için bir sinyal işleyici yüklemek:

#!/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

Merhaba Peter !! Cevabınız için teşekkürler, ama bu tam olarak aradığım şey değildi. – boddhisattva