Mit subprocess wait() und poll()
Ich bin versucht, zu schreiben eine kleine app, die verwendet das subprocess
Modul.
Mein Programm ruft eine externe Bash-Befehl, der einige Zeit braucht um zu verarbeiten. Während dieser Zeit würde ich gerne zeigen, dem Benutzer eine Reihe von Meldungen wie diese:
Verarbeitung. Warten Sie bitte...
Die Ausgabe von foo()
Wie kann ich dies tun, mit Popen.wait()
oder Popen.poll()
. Ich habe gelesen, dass ich die Popen.returncode
aber wie kann ich es aktiv zu prüfen, der Zustand, die ich nicht kenne.
InformationsquelleAutor der Frage user225312 | 2010-06-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beidewait()
(mittimeout
angegeben) undpoll()
zurückNone
wenn der Prozess noch nicht abgeschlossen ist, und etwas anderes, wenn der Prozess hat fertig (ich denke, eine ganze Zahl, die der exit-code, hoffentlich 0).Bearbeiten:
wait()
undpoll()
haben unterschiedliche Verhaltensweisen:wait
(ohne die timeout-argument) blockiert und warten Sie, bis der Vorgang abgeschlossen ist.wait
mit der timeout-argument wartentimeout
Sekunden für den Prozess zu vervollständigen. Wenn es nicht komplett ist, wird es werfen Sie dieTimeoutExpired
Ausnahme. Wenn Sie die Ausnahme abfangen, dann sind Sie herzlich willkommen, um zu gehen, oder zuwait
wieder.poll
immer sofort zurückkehrt. Es effektiv ist ein warten mit einem timeout von 0, fängt jede Ausnahme, und zurückNone
wenn der Prozess noch nicht abgeschlossen.wait
oderpoll
wenn der Prozess abgeschlossen ist, wird die popen-Objektreturncode
gesetzt (sonst ist es Keine - Sie können überprüfen, dass die so einfach wie das aufrufenwait
oderpoll
), und der Rückgabewert der Funktion wird auch der Prozess der Rückkehr-code.</Edit>
So, ich denke, Sie sollten etwas tun:
Sich bewusst sein, dass, wenn der bash-Skript erstellt eine Menge der Ausgabe, die Sie verwenden müssen
communicate()
oder etwas ähnliches, um zu verhindern, dass stdout oder stderr zu werden gestopft.InformationsquelleAutor der Antwort extraneon
@extraneon die Antwort ist ein wenig nach hinten. Beide
wait()
undpoll()
Gegenzug, den Prozess exit-code aus, wenn der Prozess abgeschlossen ist. Diepoll()
Methode zurückNone
wenn der Prozess noch läuft und diewait()
- Methode blockiert, bis der Prozess beendet:Schauen Sie sich die folgenden Seite: https://docs.python.org/3.4/library/subprocess.html#popen-objects
Popen.poll()
Popen.wait()
InformationsquelleAutor der Antwort onlynone