python: как отлавливать ctrl-c
except KeyboardInterrupt,e:
signal
ы?
вот гуглил по этому слову. Можно более конкретно? или ссылку.
на всякие случай добавил инфы в первое сообщение.
на всякие случай добавил инфы в первое сообщение.
Перед входом в левую функцию устанавливаешь свой обработчик SIGINT, потом восстанавливаешь дефолтный, и, если нужно, бросаешь KeyboardInterrupt.
Только учти, что твой time.sleep вывалится немедленно по любому сигналу.
Только учти, что твой time.sleep вывалится немедленно по любому сигналу.
устанавливаешь свой обработчик SIGINT
как? питоном обойтись можно? или сишные вызовы нужны?
Только учти, что твой time.sleep вывалится немедленно по любому сигналу.
Это не понял. Даже если свой обработчик?
Да. Да. Нет. Да.
http://docs.python.org/library/time.html#time.sleep
http://docs.python.org/library/signal.html#signal.signal
http://docs.python.org/library/time.html#time.sleep
http://docs.python.org/library/signal.html#signal.signal
всё. спасибо!.
То, что нужно.
То, что нужно.
вот гуглил по этому слову. Можно более конкретно? или ссылку.Надо знать stdlib хотя бы на уровне названий модулей

скорей надо уметь гуглить. Потому что первая ссылка в результатах гугла ведет сюда: http://docs.python.org/library/signal.html
Помнить нах не надо, само запоминается если часто используешь, и забывается если не используешь.
Помнить нах не надо, само запоминается если часто используешь, и забывается если не используешь.
точно. значит не увидел или не точно такой запрос был.
всё, сдаюсь
всё, сдаюсь

А в чём глубинный смысл менять поведение при получении сигнала sleep'ом ?
А если это сигнал о том, что пора заканчивать работу? Ты же хочешь корректно завершиться, а не дожидаться принудительной выгрузки, игнорируя все и вся в слипе?
так sleep не бесконечно спит.
и потом, если я хочу выгрузиться корректно, я вот и воспользуюсь переопределением обработчика через signal.
и потом, если я хочу выгрузиться корректно, я вот и воспользуюсь переопределением обработчика через signal.
Наверное, я тебя не понимаю... Слип прервется и запустит тот самый обработчик сигнала. Я думал, ты интересуешься, почему слип прерывается отлавливаемыми сигналами.
да именно этим и интересовался.
Всё. Теперь дошло наконец.
Всё. Теперь дошло наконец.
Оставить комментарий
Phoenix
Какие идеи? notmyfunc - функция, которую я менять не могу.
Было бы идеально, чтобы после ctrl-c прога разрешила доделать notmyfunc, а потом завершилась.
UPD
Т.е. keyboardInterrupt не ловится в notmyfunc, в результате чего она не довыполняется.
Я хочу сделать так, чтобы этот сигнал попридержали, пока выполняется эта функция.