1

这是我尝试过的...

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

4

2 回答 2

2

看起来像 Jython 中的错误。那里给出了一些解决方法。

于 2013-01-18T09:12:23.000 回答
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 后关闭程序。

于 2015-07-09T08:40:28.733 回答