2010-12-22 3 views
7

나는 루비 (ruby) 스크립트를 가지고 있으며 그 아래에서 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

안녕하세요 Peter !! 당신의 대답에 감사드립니다. 그러나 이것은 제가 정확히 찾고있는 것이 아닙니다. – boddhisattva

관련 문제