Как остановить / прервать выполнение скрипта Python?


104

Я написал программу на IDLE для токенизации текстовых файлов, и она начинает токенизировать 349 текстовых файлов! Как мне это остановить? Как я могу остановить работающую программу Python?


5
ctrl+cдолжен убить его. Как вариант, kill -9это
xbonez 05

1
Многие ответы здесь зависят от платформы. Найдите свою платформу (Windows, Linux, Mac, что-нибудь еще?)
Tripleee

Ответы:


60

Чтобы остановить вашу программу, просто нажмите Control + C.


24
Этот метод работал на моем ноутбуке с Windows, но на моем рабочем столе Linux он отображался ^Cв терминале, а системный монитор показал, что python все еще использует много ЦП ...
user3768495

Можно ли возобновить скрипт после его остановки?
Gathide 07

10
@Gathide Если вы хотите приостановить процесс и перевести его в фоновый режим, нажмите Ctrl + Z(по крайней мере, в Linux). Затем, если вы хотите убить его, запустите, kill %nгде «n» - это число, которое вы получили рядом с «Остановлено» при нажатии Ctrl + Z. Если хотите его возобновить, бегите fg.
cluxter 03

Не работает, если в программе есть общее предложение except :. Исключение: перехватывает прерывание, что-то делает (или нет), а затем программа весело продолжает работу.
DragonLord

117

Вы также можете сделать это, если используете exit()функцию в своем коде. В идеале можно sys.exit(). sys.exit()что может завершить работу Python, даже если вы запускаете что-то параллельно через multiprocessingпакет.

Примечание: чтобы использовать sys.exit(), вы должны импортировать его:import sys


8
Примечание: я мог найти примеры, в которых sys.exit(1)не останавливается процесс. У меня в основном несколько потоков, и каждый из них блокирует внешние процессы, запущенные Popen. Мне нужен ядерный вариант, чтобы убить все подпроцессы, созданные процессом Python, а также сам процесс Python. Пока не нашел.
Dici

sys.exit () не убивает процесс, но вызывает исключение SystemExit Exception, которое не останавливает выполнение, закрывая программу
c24b

37

Если ваша программа запущена на интерактивной консоли, нажатие CTRL+ Cвызовет KeyboardInterruptисключение в основном потоке.

Если ваша программа Python его не поймает, KeyboardInterruptPython завершится. Однако except KeyboardInterrupt:блок или что-то вроде голого except:не позволят этому механизму фактически остановить запуск скрипта.

Иногда, если KeyboardInterruptне работает, вы можете SIGBREAKвместо этого отправить сигнал; в Windows CTRL+ Pause/Breakможет обрабатываться интерпретатором без создания перехватываемого KeyboardInterruptисключения.

Однако эти механизмы в основном работают, только если интерпретатор Python работает и реагирует на события операционной системы. Если интерпретатор Python по какой-либо причине не отвечает, наиболее эффективным способом является завершение всего процесса операционной системы, в котором запущен интерпретатор. Механизм этого зависит от операционной системы.

В среде оболочки в стиле Unix вы можете нажать CTRL+, Zчтобы приостановить любой процесс, который в настоящее время управляет консолью. После того, как вы получите приглашение оболочки, вы можете использовать его jobsдля вывода списка приостановленных заданий, и вы можете убить первое приостановленное задание с помощью kill %1. (Если вы хотите запустить его снова, вы можете продолжить работу на переднем плане, используя fg %1; прочтите руководство вашей оболочки по управлению заданиями для получения дополнительной информации.)

В качестве альтернативы, в Unix или Unix-подобной среде вы можете найти PID процесса Python (идентификатор процесса) и убить его с помощью PID. Используйте что-то вроде того, ps aux | grep pythonчтобы найти, какие процессы Python запущены, а затем использовать kill <pid>для отправки SIGTERMсигнала.

Команда killв Unix отправляется SIGTERMпо умолчанию, и программа Python может установить обработчик сигнала для SIGTERMиспользования signalмодуля. Теоретически любой обработчик сигналов SIGTERMдолжен корректно завершать процесс. Но иногда, если процесс застревает (например, заблокирован в состоянии непрерывного сна ввода-вывода), SIGTERMсигнал не имеет никакого эффекта, потому что процесс даже не может проснуться, чтобы обработать его.

Чтобы принудительно убить процесс, который не отвечает на сигналы, вам необходимо отправить SIGKILLсигнал, который иногда называют, kill -9потому что 9это числовое значение SIGKILLконстанты. Из командной строки вы можете использовать kill -KILL <pid>(или kill -9 <pid>для краткости), чтобы отправить SIGKILLи немедленно остановить процесс.

В Windows у вас нет системы сигналов процесса Unix, но вы можете принудительно завершить запущенный процесс с помощью TerminateProcessфункции. В интерактивном режиме самый простой способ сделать это - открыть диспетчер задач, найти python.exeпроцесс, соответствующий вашей программе, и нажать кнопку «Завершить процесс». Вы также можете использовать taskkillкоманду для аналогичных целей.


31
  • Чтобы остановить скрипт Python, просто нажмите Ctrl + C.
  • exit()Вы можете сделать это внутри скрипта с .
  • Вы можете сделать это в интерактивном скрипте, просто выполнив выход.
  • Вы можете использовать pkill -f name-of-the-python-script.

Последний вариант особенно полезен, когда вы запускаете сценарий в python script.py&
автономном

26

Ctrl-Break мощнее Ctrl-C


4
Как поясняет Дэниел Прайден в своем ответе, клавиша Break на клавиатуре также может быть обозначена как «Пауза» для тех, кто запутался, как я. :)
JakeStrang 05

25

Чтобы остановить запущенную программу, используйте Ctrl+, Cчтобы завершить процесс.

Чтобы обработать это программно на Python, импортируйте sysмодуль и используйте его sys.exit()там, где вы хотите завершить программу.

import sys
sys.exit()

17

Чтобы остановить скрипт python с помощью клавиатуры: Ctrl+C

Чтобы остановить его с помощью кода (у меня это сработало на Python 3):

import os
os._exit(0)

вы также можете использовать:

import sys
sys.exit()

или:

exit()

или:

raise SystemExit

4

Ctrl + Z должен сделать это, если вы застряли в оболочке python. Имейте в виду, что экземпляры скрипта могут продолжать работать в фоновом режиме, поэтому в Linux вам нужно убить соответствующий процесс.


это полезно при запуске (многих) параллельных процессов, и CTRL-C просто не убьет их всех. После CTRL-Z вы можете проверить jobsили psto then kill 8923754или любой идентификатор задания / процесса, который вам нужно убить
Пол

3

Когда у меня есть скрипт python, запущенный на терминале Linux, CTRL + \ работает. (не CRTL + C или D)


3

Control+ Dу меня работает на Windows 10. Также работает и установка exit()в конец.


3

exit () убьет ядро, если вы используете Jupyter Notebook, поэтому это не очень хорошая идея. raiseкоманда остановит программу.


2

вы также можете использовать, Activity Monitorчтобы остановить процесс py



0

Нажмите Ctrl+ Alt+, Deleteи появится диспетчер задач. Найдите запущенную команду Python, щелкните ее правой кнопкой мыши и выберите «Остановить» или «Убить».


0

Если вы работаете со Spyder, используйте CTRL +. (DOT) и перезапустите ядро, а также остановите программу.


0

Решение для Windows: Control + C.

Решение для Macbook: Control (^) + C.

Другой способ - открыть терминал, ввести top, записать PIDпроцесс, который вы хотите убить, а затем ввести на терминале:kill -9 <pid>

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.