Gibt es eine Möglichkeit zu überprüfen, ob ein Subprozess noch läuft?

8

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?

    
ahura 07.04.2017, 09:25
quelle

3 Antworten

9
  

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

    
stovfl 07.04.2017, 11:05
quelle
0

Sie könnten subprocess.check_output verwenden, um sich Ihre Ausgabe anzusehen.

Probieren Sie diesen Code:

%Vor%

Hoffe das hat geholfen!

    
nocturnal_beast 07.04.2017 09:37
quelle
0

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.

    
99Sono 20.07.2017 08:08
quelle

Tags und Links