Wie kann ich die Ausführung eines Python-Skripts stoppen / beenden?

96

Ich habe ein Programm in IDLE geschrieben, um Textdateien zu tokenisieren, und es beginnt, 349 Textdateien zu tokenisieren! Wie kann ich es aufhalten? Wie kann ich ein laufendes Python-Programm stoppen?

MACEE
quelle
4
ctrl+csollte es töten. Alternativ ist kill -9es
xbonez
Viele Antworten hier sind plattformspezifisch. Suchen Sie nach Ihrer Plattform (Windows, Linux, Mac, etwas anderes?)
Tripleee

Antworten:

58

Um Ihr Programm zu stoppen, drücken Sie einfach Control + C.

Christian
quelle
22
Diese Methode funktionierte auf meinem Windows-Laptop, aber auf meinem Linux-Desktop wurde sie ^Cim Terminal angezeigt, und der Systemmonitor zeigte an, dass Python immer noch viel CPU
verbraucht
Ist es möglich, das Skript nach dem Stoppen fortzusetzen?
Gathide
8
@Gathide Wenn Sie den Vorgang anhalten und in den Hintergrund stellen möchten, drücken Sie Ctrl + Z(zumindest unter Linux). Wenn Sie es dann töten möchten, führen Sie aus, kill %nwobei "n" die Zahl ist, die Sie beim Drücken neben "Gestoppt" erhalten haben Ctrl + Z. Wenn Sie es fortsetzen möchten, führen Sie es aus fg.
Cluxter
Funktioniert nicht, wenn Sie eine allgemeine Ausnahmeklausel im Programm haben. Die Ausnahme: fängt den Interrupt ab, macht etwas (oder nicht) und dann geht das Programm fröhlich weiter.
DragonLord
108

Sie können dies auch tun, wenn Sie die exit()Funktion in Ihrem Code verwenden. Idealer können Sie tun sys.exit(). sys.exit()was könnte Python beenden , auch wenn Sie Dinge parallel durch das laufen multiprocessingPaket.

Hinweis: Um das zu verwenden sys.exit(), müssen Sie es importieren:import sys

Amir
quelle
8
Hinweis: Ich konnte Beispiele finden, in denen sys.exit(1)der Prozess nicht gestoppt wird. Ich habe im Grunde mehrere Threads und jeder von ihnen blockiert externe Prozesse, die von gestartet wurden Popen. Ich brauche eine nukleare Option, um alle vom Python-Prozess erstellten Unterprozesse sowie den Python-Prozess selbst zu beenden. Bisher nicht gefunden.
Dici
sys.exit () beendet den Prozess nicht, löst jedoch eine SystemExit-Ausnahme aus, die die Ausführung nicht durch Schließen des Programms
stoppt
33

Wenn Ihr Programm auf einer interaktiven Konsole ausgeführt wird, wird durch Drücken von CTRL+ Ceine KeyboardInterruptAusnahme im Hauptthread ausgelöst.

Wenn Ihr Python-Programm es nicht abfängt, KeyboardInterruptwird Python beendet. Ein except KeyboardInterrupt:Block oder so etwas wie ein nackter Block except:verhindert jedoch, dass dieser Mechanismus die Ausführung des Skripts tatsächlich stoppt.

Wenn dies KeyboardInterruptnicht funktioniert, können Sie manchmal SIGBREAKstattdessen ein Signal senden . Unter Windows kann CTRL+ Pause/Breakvom Interpreter verarbeitet werden, ohne dass eine abfangbare KeyboardInterruptAusnahme generiert wird .

Diese Mechanismen funktionieren jedoch hauptsächlich nur, wenn der Python-Interpreter ausgeführt wird und auf Betriebssystemereignisse reagiert. Wenn der Python-Interpreter aus irgendeinem Grund nicht reagiert, ist es am effektivsten, den gesamten Betriebssystemprozess zu beenden, auf dem der Interpreter ausgeführt wird. Der Mechanismus hierfür variiert je nach Betriebssystem.

In einer Shell-Umgebung im Unix-Stil können Sie CTRL+ drücken Z, um den Prozess anzuhalten, der gerade die Konsole steuert. Sobald Sie die Shell-Eingabeaufforderung zurückerhalten, können Sie jobsangehaltene Jobs auflisten und den ersten angehaltenen Job mit beenden kill %1. (Wenn Sie es erneut ausführen möchten, können Sie den Job im Vordergrund fortsetzen, indem fg %1Sie Folgendes verwenden: Weitere Informationen finden Sie im Handbuch Ihrer Shell zur Jobsteuerung.)

Alternativ können Sie in einer Unix- oder Unix-ähnlichen Umgebung die PID (Prozess-ID) des Python-Prozesses finden und nach PID beenden. Verwenden Sie so etwas wie, ps aux | grep pythonum herauszufinden, welche Python-Prozesse ausgeführt werden, und kill <pid>senden Sie dann ein SIGTERMSignal.

Der killBefehl unter Unix SIGTERMwird standardmäßig gesendet, und ein Python-Programm kann einen Signalhandler für die SIGTERMVerwendung des signalModuls installieren . Theoretisch sollte jeder Signalhandler für SIGTERMden Prozess ordnungsgemäß beenden. Aber manchmal, wenn der Prozess stecken bleibt (z. B. in einem unterbrechungsfreien E / A-Ruhezustand blockiert), hat ein SIGTERMSignal keine Auswirkung, da der Prozess nicht einmal aufwachen kann, um damit umzugehen.

Um gewaltsam einen Prozess zu töten, der nicht auf Signale reagiert, müssen Sie senden SIGKILLSignal, manchmal als kill -9da 9ist der numerische Wert der SIGKILLKonstante. Über die Befehlszeile können Sie kill -KILL <pid>(oder kill -9 <pid>kurz) ein senden SIGKILLund den laufenden Prozess sofort stoppen.

Unter Windows verfügen Sie nicht über das Unix-System für Prozesssignale, können jedoch einen laufenden Prozess mithilfe der TerminateProcessFunktion zwangsweise beenden . Interaktiv ist es am einfachsten, den Task-Manager zu öffnen, den python.exeProzess zu finden, der Ihrem Programm entspricht, und auf die Schaltfläche "Prozess beenden" zu klicken. Sie können den taskkillBefehl auch für ähnliche Zwecke verwenden.

Daniel Pryden
quelle
29
  • Um ein Python-Skript zu stoppen, drücken Sie einfach Ctrl + C.
  • In einem Skript mit exit()können Sie es tun.
  • Sie können dies in einem interaktiven Skript tun, indem Sie einfach beenden.
  • Sie können verwenden pkill -f name-of-the-python-script.
wpp
quelle
Die letzte Option ist besonders nützlich, wenn Sie das Skript in einem getrennten Modus python script.py&
ausführen
26

Strg-Pause ist leistungsfähiger als Strg-C

Scott P.
quelle
4
Wie Daniel Pryden in seiner Antwort klarstellt, könnte die Break-Taste auf der Tastatur auch als Pause bezeichnet werden, für diejenigen, die wie ich verwirrt waren. :)
JakeStrang
24

Um ein laufendes Programm zu stoppen , beenden Sie den Vorgang mit STRG + C.

Um dies programmgesteuert in Python zu handhaben, importieren Sie das sysModul und verwenden sys.exit()Sie die Stelle, an der Sie das Programm beenden möchten.

import sys
sys.exit()
Chandella07
quelle
15

So stoppen Sie ein Python-Skript über die Tastatur: Ctrl+C

So stoppen Sie die Verwendung von Code (Dies hat bei Python 3 bei mir funktioniert):

import os
os._exit(0)

Sie können auch verwenden:

import sys
sys.exit()

oder:

exit()

oder:

raise SystemExit
Firzok Nadeem
quelle
4

Strg + Z sollte es tun, wenn Sie in der Python-Shell gefangen sind. Beachten Sie, dass Instanzen des Skripts weiterhin im Hintergrund ausgeführt werden können. Unter Linux müssen Sie den entsprechenden Prozess beenden.

Juke
quelle
Dies ist nützlich, wenn (viele) parallele Prozesse ausgeführt werden und STRG-C sie nicht alle beendet. Nach STRG-Z können Sie überprüfen jobsoder psbis dahin kill 8923754oder welche Job-ID / Prozess-ID Sie töten müssen
Paul
3

Wenn auf einem Linux-Terminal ein Python-Skript ausgeführt wird, funktioniert STRG + \. (nicht CRTL + C oder D)

Stefun06
quelle
3

Control+ Dfunktioniert für mich unter Windows 10. Auch das Setzen exit()am Ende funktioniert.

chess_lover_6
quelle
2

Sie können auch den verwenden Activity Monitor, um den Py-Prozess zu stoppen

Dennis
quelle
2

exit () beendet den Kernel, wenn Sie sich in Jupyter Notebook befinden, daher ist dies keine gute Idee. raiseBefehl stoppt das Programm.

Chadee Fouad
quelle
1

Um Ihr Programm zu stoppen, drücken Sie einfach CTRL+D

oder exit().

Vivek Parmar
quelle
0

Drücken Sie Ctrl+ Alt+ Deleteund der Task-Manager wird angezeigt. Suchen Sie den ausgeführten Python-Befehl, klicken Sie mit der rechten Maustaste darauf und klicken Sie auf Stop oder Kill.

Andrew Hyder
quelle
0

Wenn Sie mit Spyder arbeiten, verwenden Sie STRG +. (DOT) und Sie werden den Kernel neu starten, außerdem werden Sie das Programm stoppen.

l1den
quelle
0

Windows-Lösung: Control + C.

Macbook-Lösung: Control (^) + C.

Eine andere Möglichkeit besteht darin, ein Terminal zu öffnen, den Prozess, den Sie beenden möchten , einzugeben top, aufzuschreiben PIDund dann auf dem Terminal einzugeben:kill -9 <pid>

Seralouk
quelle