Как я могу переопределить прерывание клавиатуры? (Питон)

Могу ли я в любом случае заставить мой скрипт выполнять одну из моих функций, когда Ctrl+c попадает во время работы скрипта?


person Takkun    schedule 09.08.2011    source источник
comment
См. stackoverflow.com/questions/ 4205317/ для нескольких вариантов.   -  person DSM    schedule 09.08.2011


Ответы (3)


Взгляните на обработчики сигналов. CTRL-C соответствует SIGINT (сигнал № 2 в системах posix).

Пример:

#!/usr/bin/env python
import signal
import sys
def signal_handler(signal, frame):
    print 'You pressed Ctrl+C - or killed me with -2'
    sys.exit(0)
signal.signal(signal.SIGINT, signal_handler)
print 'Press Ctrl+C'
signal.pause()
person miku    schedule 09.08.2011
comment
примечание: это также должно поразить обработчик сигнала, когда вы переходите kill -2 [pid] в ОС - person wim; 09.08.2011
comment
@wim, хороший вопрос, спасибо, добавил подсказку к моему ответу - есть ли способ отличить убийство с помощью клавиатуры от убийства с помощью убийства? - person miku; 09.08.2011
comment
Я видел, что первый вызовет исключение KeyboardInterrupt в python, а второй — нет. Но я не уверен в деталях реализации, почему это так. - person wim; 09.08.2011

Конечно.

try:
  # Your normal block of code
except KeyboardInterrupt:
  # Your code which is executed when CTRL+C is pressed.
finally:
  # Your code which is always executed.
person Senthil Kumaran    schedule 09.08.2011

Используйте исключение KeyboardInterrupt и вызовите свою функцию в блоке except.

person ig0774    schedule 09.08.2011