Как перехватить прерывание клавиатуры (CTRL-C) в Jython? - PullRequest
1 голос
/ 15 сентября 2011

Это то, что я пробовал ...

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 ]

2 голосов
/ 18 января 2013

Похоже, ошибка в Jython .Там приведены некоторые обходные пути.

1 голос
/ 09 июля 2015

Я сталкивался с подобной проблемой раньше.Вот как я получаю его разрешение.

Сначала зарегистрируйте обработчик сигнала в вашем скрипте 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 как обычный ввод символов.

Итак, во-вторых, нужно изменить python.console на альтернативный класс консоли org.python.core.PlainConsole, изменив свойство Jython:

python.console=org.python.core.PlainConsole

или добавив аргумент jvm:

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

Это поможет вам закрыть программу после нажатия клавиш CTRL + C.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...