Найти - Пользователи
Полная версия: Ctrl+C
Начало » Python для новичков » Ctrl+C
1
odnochlen
Можно как-то сделать так, чтобы интерпретатор питона по ctrl+c сразу сдыхал, как это делают некоторые, например, перл?

Есть некоторые написанные альтернативно одаренными прогерами модули (среди них, кстати, grab), которые эту комбинацию тупо игнорят.
fata1ex
Раскладку надо переключать. Ctrl+C просто посылает SIGINT. Если модуль ловит KeyboardInterrupt или использует свой хэндлер для сигнала, то можно обнажиматься.

Да и никто не мешает сделать Ctrl+Z && kill -9 pid.
odnochlen
fata1ex
Раскладку надо переключать.
?

fata1ex
Да и никто не мешает сделать Ctrl+Z && kill -9 pid.
А под виндой? Никто не мешает запустить process explorer, найти нужный процесс питона итд?
Singularity

odnochlen надо перехватить нажатия самому и закрыть программу самому

odnochlen
А как?
EBFE
Под виндой: Ctrl + Break (SIGBREAK) *http://en.wikipedia.org/wiki/Break_key*

odnochlen
ативно одаренными прогерами модули (среди них, кстати, grab), которые эту комбинацию тупо игнорят.
Ну по идее модулю не обязательно ловить Ctrl + C => KeyboardInterrupt и тупо игнорить. Вполне достаточно вызова функций из библиотек на C/etc. Или же мешает сам GIL.
PoC:
>>> max(xrange(2**30))
KeyboardInterrupt не ловится, но и Ctrl+C не работает
odnochlen
EBFE
Под виндой: Ctrl + Break (SIGBREAK) *http://en.wikipedia.org/wiki/Break_key*
А это не одно и то же?

EBFE
KeyboardInterrupt не ловится, но и Ctrl+C не работает
Да, блокирующие вызовы вроде сокетов иирк тоже не реагируют. Что делать?
EBFE
odnochlen
А это не одно и то же?
Нет. http://msdn.microsoft.com/en-us/library/windows/desktop/ms682541(v=vs.85).aspx
SIGBREAK вообще не входит в POSIX
Да, блокирующие вызовы вроде сокетов иирк тоже не реагируют. Что делать?
Жать CRTL+BREAK ну или переходить на Py 3.2 - там вроде бы изменили GIL
Wikipedia
В версии 3.2 будет внедрён изменённый GIL. Основные нововведения:

* Переключение по таймауту, а не по количеству опкодов — в предыдущей версии GIL освобождался через каждые 100 операций. Но операция может выполняться от наносекунд, до долей секунд. В новой версии блокировка будет сниматься каждые 5 миллисекунд;
odnochlen
А какое отношение GIL имеет к блокирующим операциям?

Хаха, хорошо ты подсказал. Ctrl+Break сразу грохает процесс. А на юнипсах оно будет работать?
EBFE
odnochlen
А какое отношение GIL имеет к блокирующим операциям?
Тайна сия великая есть (короче, не знаю я) . В этом случае может быть и не GIL виноват а сам интерпретатор.
Просто на Jython max(xrange(2**30)) прекрасно “убивается” Ctrl+C. Правда в PyPy тоже

Ctrl+Break сразу грохает процесс. А на юнипсах оно будет работать?
В bash: CTRL + Z && bg && kill $!
Ну или как писал fata1ex. Если есть желание (и нечего делать), можно и к юникс SIGBREAK приделать.

This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB