Я работаю над скриптом на Python, который запускает несколько процессов и подключений к базе данных. Время от времени я хочу завершить работу скрипта с помощью сигнала Ctrl+C, и я хотел бы выполнить некоторую очистку.
Дополнительную документацию по signal можно найти здесь.
Ответ 2
Вы можете рассматривать это как исключение (KeyboardInterrupt), как и любое другое. Создайте новый файл и запустите его из своей командной строки со следующим содержимым, чтобы понять, что я имею в виду.:
import time, sys
x = 1 whileTrue: try: print x time.sleep(.3) x += 1 except KeyboardInterrupt: print"Bye" sys.exit()
Ответ 3
И как контекстный менеджер:
import signal
classGracefulInterruptHandler(object):
def__init__(self, sig=signal.SIGINT): self.sig = sig
with GracefulInterruptHandler() as h: for i in xrange(1000): print"..." time.sleep(1) if h.interrupted: print"interrupted!" time.sleep(2) break
Вложенные обработчики:
with GracefulInterruptHandler() as h3: whileTrue: print"(1)..." time.sleep(1) with GracefulInterruptHandler() as h2: whileTrue: print"\t(2)..." time.sleep(1) if h2.interrupted: print"\t(2) interrupted!" time.sleep(2) break if h3.interrupted: print"(1) interrupted!" time.sleep(2) break