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

104

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

MACEE
источник
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.
wpp
источник
Последний вариант особенно полезен, когда вы запускаете сценарий в python script.py&
автономном
26

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

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

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

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

import sys
sys.exit()
Chandella07
источник
17

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

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

import os
os._exit(0)

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

import sys
sys.exit()

или:

exit()

или:

raise SystemExit
Фирзок Надим
источник
4

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

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

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

Stefun06
источник
3

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

Chess_lover_6
источник
3

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

Чади Фуад
источник
2

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

Деннис
источник
1

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

или exit().

Вивек Пармар
источник
0

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

Эндрю Хайдер
источник
0

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

l1den
источник
0

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

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

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

Seralouk
источник