Есть ли способ отправить событие прерывания клавиатуры в PyCharm IDE (3.1) в режиме отладки?
Прерывание клавиатуры в режиме отладки PyCharm
Ответ 1
К сожалению, нет простого способа сделать это. Вам нужно будет использовать модуль psutil
и signal
. Для этого вам нужно установить psutil
, и лучший способ сделать это через pip
:
pip install psutil
Итак, скажем, у нас есть экспонат A:
while True:
try:
time.sleep(3)
print "Zzzz"
time.sleep(3)
print("gong!")
except KeyboardInterrupt as e:
print "Closed by an Interrupt"
break
И вы используете это в PyCharm. Убедитесь, что используемый интерпретатор имеет psutils
. Вы можете проверить:
Убедитесь, что вы правильно настроили интерпретатор:
Если вы не установили psutil
, вы всегда можете сделать это, хотя кнопка Install.
Итак, теперь, когда у нас все настроено, отлаживаем программу:
Теперь все, что нам нужно сделать, это получить идентификатор процесса, и мы можем получить это в самом начале программы:
Итак, запустим консоль и отправьте сигнал:
И если это сработает правильно, вы должны увидеть завершение цикла while:
Вы можете оптимизировать процесс, добавив функцию для отправки прерывания в стартовом script для вашей консоли:
Как только вы закончите со всем этим, все, что вам нужно сделать, это вызвать interrupt(<pid here>)
, чтобы вызвать прерывание клавиатуры в вашем процессе.
Надеюсь, что ответ на ваш вопрос.
Ответ 2
Кнопка PyCharm Stop теперь отправляет SIGINT
как в режиме отладки, так и в режиме запуска. Если SIGINT
не завершает программу, кнопка "Стоп" меняет свой сигнал на SIGKILL
. Он также меняет свою иконку на форму черепа:
Ответ 3
Это ошибка в PyCharm. Смотрите: http://youtrack.jetbrains.com/issue/PY-4840
Прерывание клавиатуры - SIGINT. В системах Unix вы можете либо перейти в командную строку и сделать:
$ kill -INT <pid>
или в питоне:
import os, signal
os.kill(<pid>,signal.SIGINT)
Ответ 4
Я воспользовался этим сообщением во время поиска ошибок в Pycharm для этой проблемы: https://youtrack.jetbrains.com/issue/PY-4840
Если вы используете версию Pycharm 3, это может помочь, это сработало для меня.
Один из комментариев в трекере: "Я действительно обнаружил, что Ctrl + C в конечном итоге останавливает запуск script, но сначала вы должны написать письмо в консоли во время его работы. Поэтому нажмите на консольное окно, нажмите любую клавишу, а затем нажмите Ctrl-C. Другими словами, это похоже на проблему с фокусом графического интерфейса.
Ответ 5
Как упомянуто в этом комментарии - Почему это прерывание клавиатуры Python не работает? (в пичарме):
В последних версиях PyCharm вы можете включить
Emulate terminal in output console
в своей конфигурации запуска - это позволяет Ctrl + C в консоли запуска отправлять прерывание клавиатуры.
Протестировано с PyCharm 2018.3 (Community Edition):