Python: Не можете непрерывно перехватывать клавиатурные прерывания в Windows? - PullRequest
1 голос
/ 23 мая 2011

В Python я написал следующий код, чтобы посмотреть, смогу ли я заставить свою программу не завершаться при Control + C, как все эти модные терминальные приложения, такие как Vim или Dwarf Fortress.

def getinput():
    x = input('enter something: ')
while True:
    try:
            getinput()
    except KeyboardInterrupt:
            pass

К сожалению,в консоли Windows этот сценарий завершается через несколько секунд.Если я запускаю его в режиме ожидания, он работает как положено.Версия Python 3.2.1, 3.2 действовали так же.Я делаю что-то не так?

РЕДАКТИРОВАТЬ: Если я удерживаю, Control + C, то есть.

1 Ответ

2 голосов
/ 23 мая 2011

Чтобы не завершаться на Control-C, вам нужно установить обработчик сигнала.Из документации по Python здесь

Python устанавливает небольшое количество обработчиков сигналов по умолчанию: SIGPIPE игнорируется (поэтому ошибки записи в каналах и сокетах можно сообщать как обычные исключения Python)и SIGINT преобразуется в исключение KeyboardInterrupt.Все они могут быть переопределены.

Так что вам нужно установить обработчик сигнала, чтобы перехватить сигнал SIGINT и сделать с ним то, что вы хотите.

Поведение с IDLEвозможно, у них установлен обработчик, блокирующий выход из приложения.

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