2010-12-22 11 views
7

मेरे पास एक रूबी स्क्रिप्ट है जो असीमित रूप से 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 

प्रत्येक पुनरावृत्ति के माध्यम से, कोई उपयोगकर्ता इनपुट नहीं पूछा जाना चाहिए।

+0

वास्तव में, यह 1 से आगे मुद्रित नहीं करता है। यह 0 से आगे प्रिंट करता है। – sawa

उत्तर

4

मुझे लगता है कि आप एक अलग थ्रेड में बाहर निकलने की स्थिति की जांच करना होगा:

# 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, तुम, बाहर निकलने के लिए q<Enter> दर्ज करनी होगी के रूप में है कि कैसे मानक इनपुट काम करता है।

+0

धन्यवाद Mladen .. !! यह वही है जो मैं खोज रहा था। – boddhisattva

13

उपयोग 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" 
+1

हाय पीटर !! आपके उत्तर के लिए धन्यवाद, लेकिन यह वही नहीं था जो मैं ढूंढ रहा था। – boddhisattva

संबंधित मुद्दे