Есть ли способ отправить событие прерывания клавиатуры в PyCharm IDE (3.1) в режиме отладки?
Мне нужно то же самое. Мне нужно иметь возможность изящно останавливать сценарий с обработкой кода с помощью CTRL-C или подобного, а не просто использовать кнопку «Стоп». — person arbulgazar schedule 28.04.2014
Очевидно, нет: посмотрите и проголосуйте за это. это для CLion, но, видимо, если его изменить, он также изменит PyCharm. — person arbulgazar schedule 08.07.2020
Также обратите внимание, что в последних версиях большой красный квадрат отправляет SIGINT, ждет одну секунду, а затем SIGTERM. Если ваша очистка достаточно быстрая, это может сработать для вас. — person arbulgazar schedule 08.07.2020
К сожалению, нет простого способа сделать это. Вам нужно будет использовать
psutil
и модульsignal
. Чтобы это работало, вам нужно установитьpsutil
, и лучший способ сделать это черезpip
:Итак, допустим, у нас есть экспонат A:
И вы запускаете это в PyCharm. Убедитесь, что используемый вами интерпретатор
psutils
установлен. Ты можешь проверить:Убедитесь, что вы правильно настроили интерпретатор:
Если вы еще не установили
psutil
, вы всегда можете сделать это с помощью кнопки Установить.Итак, теперь, когда мы все настроили, давайте отладим программу:
Теперь все, что нам нужно сделать, это получить идентификатор процесса, и мы можем получить его в самом начале программы:
Итак, давайте запустим нашу консоль и отправим сигнал:
И если это сработало правильно, вы должны увидеть окончание цикла while:
Вы можете еще больше упростить процесс, добавив функцию отправки прерывания в стартовый скрипт для вашей консоли:
Когда вы закончите со всем этим, все, что вам нужно сделать, это вызвать
interrupt(<pid here>)
, чтобы вызвать прерывание клавиатуры в вашем процессе.Я надеюсь, что это отвечает на ваш вопрос.
Благодарность! Это точно ответ. Надеемся, что Jetbrains создаст более удобные способы для этого в своих будущих выпусках. — person arbulgazar; 30.05.2014
Рада что тебе понравилось. Но это довольно утомительно в PyCharm, и я надеюсь, что это быстро исправят. — person arbulgazar; 30.05.2014
Есть ли способ как-то получить PID в сценарии запуска? В приложениях, которые много печатают, через полчаса после запуска толком не заглянешь в начало лога консоли. — person arbulgazar; 05.08.2015
@Pastafarianist Я не знаю, есть ли он, значит, это ошибка. — person arbulgazar; 05.08.2015
Спасибо большое, никто не мог ожидать более подробного ответа! — person arbulgazar; 25.11.2015
Это ошибка в PyCharm. См.: https://youtrack.jetbrains.com/issue/PY-4840.
Прерывание клавиатуры — это SIGINT. В системах unix вы можете перейти в командную строку и выполнить:
или в питоне:
Ошибка для PyCharm была закрыта как исправленная — попытка повторного открытия. — person arbulgazar; 17.08.2015
Здесь хорошее и простое решение, этому ответу нужно больше голосов. — person arbulgazar; 10.05.2019
@Отметьте (и проголосуйте!) com/issue/ … для CLion, но, очевидно, если изменить его там, он также изменит PyCharm. — person arbulgazar; 08.07.2020
Кнопка PyCharm Stop теперь отправляет
SIGINT
как в режиме отладки, так и в режиме выполнения. ЕслиSIGINT
не завершает программу, кнопка Стоп меняет свой сигнал наSIGKILL
. Он также меняет свой значок на форму черепа:Любые мысли о том, как всегда отправлять SIGKILL? Маленький череп появляется каждый раз, когда я пытаюсь остановить отладку, это довольно надоедливо. — person arbulgazar; 09.03.2017
@MikeyE Отправка SIGKILL по умолчанию — плохая идея. Это может оставить дочерние процессы запущенными и избежать очистки. В любом случае, если вы решили, что вам это все равно нужно, вы можете попробовать закрыть программу (кнопка с крестиком, т.е. Ctrl+F4). — person arbulgazar; 10.03.2017
Это может быть плохой идеей, но именно это PyCharm делает по умолчанию, если процесс нельзя остановить. В моем случае это буквально каждый раз, когда я нажимаю кнопку остановки. Возможно, было бы лучше послать другой сигнал. Но независимо от того, как вы это делаете в PyCharm? — person arbulgazar; 12.03.2017
@milaniez Вы знаете, в какой версии появилась эта функция? Кажется, на моем Mac отправляется SIGINT, но с Windows PyCharm 2017.1.5 программа немедленно завершается как в режиме отладки, так и в режиме выполнения. — person arbulgazar; 21.09.2017
Обратите внимание, что перед отправкой SIGKILL существует задержка в одну секунду. Если для очистки требуется больше, вам не повезло): Однако отправка SIGINT в процесс (либо с помощью терминала, либо с помощью psutils в соответствии с ответом GamesBraniac) также работает. — person arbulgazar; 08.07.2020
Я наткнулся на это сообщение во время поиска этой проблемы в отслеживании ошибок Pycharm: https://youtrack.jetbrains.com/issue/PY-4840
Если вы используете версию Pycharm 3, это может помочь, у меня сработало.
Один из комментариев в трекере: «На самом деле я обнаружил, что Ctrl+C в конце концов останавливает запущенный скрипт, но вы должны сначала написать письмо в консоль, пока он работает. Итак, щелкните в окне консоли, нажмите любую клавишу, а затем нажмите Ctrl-C. Другими словами, это похоже на проблему с получением фокуса кадра GUI».
Это не работает в PyCharm 2019.3.1 (Community Edition). — person arbulgazar; 26.02.2020
Это помогает в научном режиме версии 2020.3.4. — person arbulgazar; 18.03.2021
Как упоминалось в этом комментарии — Почему не это прерывание клавиатуры python работает? (в пичарме):
Протестировано с PyCharm 2018.3 (Community Edition):
Также это нарушит библиотеку tqdm: