2016-07-29 2 views
1

Я искал эту тему безрезультатно.Есть ли обходной путь для «try: input() except KeyboardInterrupt:«

Можно ли сделать что-то вдоль линий:

try: 
    input_var = input('> ') 
except KeyboardInterrupt: 
    print("This will not work.") 

Но когда я пытаюсь это сделать, и CTRL-C, он просто ничего не делает.

Есть ли другой способ достичь этого?

Использование Windows 10, Python 3.5.2, и Powershell

Примечание: Я не используя input_var для печати, я делаю 3, если/Элиф/иначе основаны вокруг него.

ответ

2

Похоже, вас интересовал бы сигнальный модуль.

This Answer демонстрирует, как использовать сигнальный модуль для захвата Ctrl + C или SIGINT.

Для вашего случая использования, то вдоль линий ниже будет работать:

#!/usr/local/bin/python3 
import signal 

def signal_handler(signal, frame): 
    raise KeyboardInterrupt('SIGINT received') 

signal.signal(signal.SIGINT, signal_handler) 
try : 
    input_var = input('> ') 
except KeyboardInterrupt : 
    print("CTRL+C Pressed!") 
+0

Только что попробовал, он только что вернулся это: Traceback (самый последний вызов последнего): – Aaron

+0

Похоже, ваш комментарий был отрезан ; это работает для меня, используя python3. Имейте в виду, что если вы используете python2, вместо input() следует использовать raw_input(). – arbo

+0

Я изменил ответ на использование python3 по умолчанию, я не заметил этого на момент написания. Вам нужно будет изменить первую строку в соответствии с вашим местоположением установки python или запустить скрипт как> python3 script.py – arbo

Смежные вопросы