2011-09-15 2 views
1

이 내가 무엇을 시도했다입니다 ...자이 썬에서 키보드 인터럽트 (CTRL-C)를 가로채는 방법은 무엇입니까?

from sun.misc import Signal 
from sun.misc import SignalHandler 

class InterruptHandler(SignalHandler): 

    def handle(self): 
     print "Shutting down server..." 


Signal.handle(Signal("INT"),InterruptHandler()) 

그것은이 http://www.javaspecialists.co.za/archive/Issue043.html을 기반으로하지만, 분명히 내가 모르는 뭔가가있어.

+0

가치가있는 부분에 대해서는 catch를 사용해도 작동하지 않는 것 같습니다. 파이썬 VM 스레드가 스크립트 대신 인터럽트를 잡는 것 같습니다. –

답변

1

전에 비슷한 문제가 발생했습니다. 이것이 내가 어떻게 해결되었는지입니다.

우선하여 자이 썬 스크립트에서 신호 핸들러를 등록 :

import signal 
def intHandler(signum, frame): 
    print "Shutting down.." 
    System.exit(1) 

# Set the signal handler 
signal.signal(signal.SIGINT, intHandler) 
signal.signal(signal.SIGTERM, intHandler) 

이 CTRL + C 키보드 입력을 처리 할 수있는 자이 썬 스크립트에 대한 신호 처리기를 등록합니다.

그러나 기본 콘솔 클래스 인 org.python.util.JLineConsole은 ctrl + C를 일반 문자 입력으로 처리합니다.

그래서, 둘째 - 필요에 의해 대체 콘솔 클래스 org.python.core.PlainConsole에 python.console을 변경하거나 변경 자이 썬 속성 :

python.console=org.python.core.PlainConsole 

을하거나 JVM 인수에 추가

-Dpython.console=org.python.core.PlainConsole 

이렇게하면 Ctrl + C를 누른 후 프로그램을 종료하는 데 도움이됩니다.