Ich habe ein Skript, in dem ich mit popen einen Shell-Befehl starte. Das Problem ist, dass das Skript nicht wartet, bis der Befehl popen beendet ist, und sofort fortfährt.
om_points = os.popen(command, "w")
.....
Wie kann ich meinem Python-Skript mitteilen, dass es warten soll, bis der Shell-Befehl beendet ist?
python
subprocess
wait
popen
michele
quelle
quelle
subprocess.run()
wurde in Python 3.5 hinzugefügt und ist "Der empfohlene Ansatz zum Aufrufen vonSie können dies verwenden
subprocess
, um dies zu erreichen.import subprocess #This command could have multiple commands separated by a new line \n some_command = "export PATH=$PATH://server.sample.mo/app/bin \n customupload abc.txt" p = subprocess.Popen(some_command, stdout=subprocess.PIPE, shell=True) (output, err) = p.communicate() #This makes the wait possible p_status = p.wait() #This will give you the output of the command being executed print "Command output: " + output
quelle
Erzwingen Sie
popen
, nicht fortzufahren, bis alle Ausgaben gelesen wurden.quelle
Lassen Sie den Befehl, den Sie übergeben möchten, sein
os.system('x')
dann verdeckst du es zu einer Aussage
t = os.system('x')
Jetzt wartet die Python auf die Ausgabe über die Befehlszeile, damit sie der Variablen zugewiesen werden kann
t
.quelle
Was Sie suchen, ist die
wait
Methode.quelle
wait
ist eine Methode dersubprocess
Klasse.wait () funktioniert gut für mich. Die Teilprozesse p1, p2 und p3 werden gleichzeitig ausgeführt. Daher sind alle Prozesse nach 3 Sekunden abgeschlossen.
import subprocess processes = [] p1 = subprocess.Popen("sleep 3", stdout=subprocess.PIPE, shell=True) p2 = subprocess.Popen("sleep 3", stdout=subprocess.PIPE, shell=True) p3 = subprocess.Popen("sleep 3", stdout=subprocess.PIPE, shell=True) processes.append(p1) processes.append(p2) processes.append(p3) for p in processes: if p.wait() != 0: print("There was an error") print("all processed finished")
quelle
Ich denke, process.communicate () wäre für eine Ausgabe mit geringer Größe geeignet. Für eine größere Leistung wäre dies nicht der beste Ansatz.
quelle