Подтвердить что ты не робот

Прерывание клавиатуры в режиме отладки PyCharm

Есть ли способ отправить событие прерывания клавиатуры в PyCharm IDE (3.1) в режиме отладки?

4b9b3361

Ответ 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. Вы можете проверить:

enter image description here

Убедитесь, что вы правильно настроили интерпретатор:

enter image description here

Если вы не установили psutil, вы всегда можете сделать это, хотя кнопка Install.

Итак, теперь, когда у нас все настроено, отлаживаем программу:

enter image description here

Теперь все, что нам нужно сделать, это получить идентификатор процесса, и мы можем получить это в самом начале программы:

enter image description here

Итак, запустим консоль и отправьте сигнал:

enter image description here

И если это сработает правильно, вы должны увидеть завершение цикла while:

enter image description here

Вы можете оптимизировать процесс, добавив функцию для отправки прерывания в стартовом script для вашей консоли:

enter image description here

Как только вы закончите со всем этим, все, что вам нужно сделать, это вызвать 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):

enter image description here

Также это сломает библиотеку tqdm:

enter image description here