Ich starte eine Reihe von Teilprozessen mit subprocess.Popen in Python. Ich möchte prüfen, ob ein solcher Prozess abgeschlossen ist. Ich habe zwei Möglichkeiten gefunden, den Status eines Subprozesses zu überprüfen, aber beide scheinen den Prozess zu erzwingen. Man benutzt process.communicate () und druckt den Returncode, wie erklärt hier . Eine andere Methode ruft process.wait () auf und überprüft, ob sie 0 zurückgibt.
Gibt es eine Möglichkeit, zu überprüfen, ob ein Prozess noch läuft, ohne darauf zu warten, dass er abgeschlossen wird, wenn dies der Fall ist?
Frage : ... eine Möglichkeit zu überprüfen, ob ein Prozess noch läuft ...
Sie können es zum Beispiel tun:
%Vor%Python »3.6.1 Popen-Objekte der Dokumentation
Getestet mit Python: 3.4.2
Sie könnten subprocess.check_output verwenden, um sich Ihre Ausgabe anzusehen.
Probieren Sie diesen Code:
%Vor%Hoffe das hat geholfen!
Machen Sie das
%Vor%Wie von der Hauptantwort vorgeschlagen, ist der empfohlene Weg und der einfachste Weg zu überprüfen, ob ein Prozess läuft. (Und es funktioniert auch in jython)
Wenn Sie die Prozessinstanz nicht zur Hand haben, um sie zu überprüfen. Verwenden Sie dann das Betriebssystem TaskList / Ps processes.
Unter Windows sieht mein Befehl wie folgt aus:
%Vor%Dies entspricht im Wesentlichen der folgenden Befehlszeile:
%Vor%Und auf Linux mache ich genau das gleiche mit dem:
%Vor%Der Befehl ps gibt bereits den Fehlercode 0/1 zurück, je nachdem, ob der Prozess gefunden wurde. Unter Windows benötigen Sie den Befehl find string.
Dies ist derselbe Ansatz, der im folgenden Stack-Überlauf-Thread behandelt wird:
Überprüfen Sie, ob ein Prozess mit ausgeführt wird seine PID in JAVA
HINWEIS: Wenn Sie diesen Ansatz verwenden, vergessen Sie nicht, Ihren Befehlsaufruf in SAP zu verpacken Versuchen: foundRunningProcess = subprocess.check_output (argumentsArray, ** kwargs) Rückgabe True außer Ausnahme als Fehler: Gib Falsch zurück
Beachten Sie, wenn Sie mit VS-Code entwickeln und reines Python und Jython verwenden. In meiner Umgebung hatte ich die Illusion, dass die poll () -Methode nicht funktionierte, weil ein Prozess, von dem ich vermutete, dass er beendet wurde, tatsächlich ausgeführt wurde. Dieser Prozess hatte Wildfly ins Leben gerufen. Und nachdem ich Wildfly gefragt hatte, ob ich aufhören soll, wartete die Shell immer noch darauf, dass der Benutzer "irgendeine Taste drückt, um fortzufahren...".
Um diesen Prozess zu beenden, funktionierte in python der folgende Code:
%Vor%Bei jython musste ich diesen Code folgendermaßen anpassen:
%Vor%Und mit diesem Unterschied ist der Prozess tatsächlich abgeschlossen. Und der jython.poll () hat mir erzählt, dass der Prozess tatsächlich beendet ist.
Tags und Links python subprocess