Могу ли я в любом случае заставить мой скрипт выполнять одну из моих функций, когда Ctrl+c
попадает во время работы скрипта?
Как я могу переопределить прерывание клавиатуры? (Питон)
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
примечание: это также должно поразить обработчик сигнала, когда вы переходите
kill -2 [pid]
в ОС
- person wim; 09.08.2011
@wim, хороший вопрос, спасибо, добавил подсказку к моему ответу - есть ли способ отличить убийство с помощью клавиатуры от убийства с помощью убийства?
- person miku; 09.08.2011
Я видел, что первый вызовет исключение
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