Как мне записать SIGINT в Python? - PullRequest
481 голосов
/ 11 июля 2009

Я работаю над скриптом Python, который запускает несколько процессов и соединений с базой данных. Время от времени я хочу убить сценарий с помощью сигнала Ctrl + C , и я хотел бы сделать некоторую очистку.

В Perl я бы сделал это:

$SIG{'INT'} = 'exit_gracefully';

sub exit_gracefully {
    print "Caught ^C \n";
    exit (0);
}

Как мне сделать аналог этого в Python?

Ответы [ 11 ]

0 голосов
/ 10 декабря 2018

Лично я не мог использовать try / кроме KeyboardInterrupt, потому что я использовал режим стандартного сокета (IPC), который блокирует. Таким образом, SIGINT был задан, но пришел только после получения данных на сокете.

Настройка обработчика сигнала ведет себя так же.

С другой стороны, это работает только для реального терминала. Другие начальные среды могут не принять Ctrl + C или предварительно обработать сигнал.

Кроме того, в Python есть «Исключения» и «BaseExceptions», которые отличаются в том смысле, что интерпретатору необходимо завершать работу самостоятельно, поэтому некоторые исключения имеют более высокий приоритет, чем другие (исключения получены из BaseException)

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