你如何拦截Jython中的键盘中断(CTRL-C)?

时间:2011-09-15 00:55:26

标签: java jvm jython signal-handling

这就是我尝试过的......

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,但显然我错过了一些东西。

2 个答案:

答案 0 :(得分:2)

Looks like a bug in Jython。那里有一些解决方法。

答案 1 :(得分:1)

之前我遇到过类似的问题。这就是我解决问题的方法。

首先,通过以下方式在Jython脚本中注册信号处理程序:

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)

这将注册Jython脚本的信号处理程序,以处理CTRL + C键盘输入。

但是,默认控制台类org.python.util.JLineConsole将ctrl + C视为普通字符输入。

所以,其次 - 需要通过更改Jython属性将python.console更改为备用控制台类org.python.core.PlainConsole:

python.console=org.python.core.PlainConsole

或添加jvm参数:

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

这将帮助您在按下CTRL + C后关闭程序。