Ich verwende ein Python-Skript, um einen Prozess mit subprocess.Popen
auszuführen und gleichzeitig die Ausgabe in einer Textdatei zu speichern und auf der Konsole auszugeben. Dies ist mein Code:Ausgabe eines Prozesses zur Laufzeit
result = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
for line in result.stdout.readlines(): #read and store result in log file
openfile.write("%s\n" %line)
print("%s" %line)
Above Code funktioniert gut, aber was es tut, ist es zuerst den Prozess abgeschlossen ist und speichert die Ausgabe in Ergebnis variabel. Danach speichert für Schleife die Ausgabe sowie es drucken.
Aber ich möchte die Ausgabe zur Laufzeit (wie mein Prozess kann Stunden dauern, ich bekomme keine Ausgabe für alle diese Stunden).
So gibt es irgendeine andere Funktion, die mir die Ausgabe dynamisch gibt (zur Laufzeit), bedeutet, sobald der Prozess erste Zeile gibt, sollte es gedruckt werden.
Ich habe noch nie wirklich versucht, aber ich glaube, Sie sollen Ihre eigenen schicken Python 'file' Objekt zum' stdout' (oder 'stdin' oder' stderr') Argument. Dann müssen Sie diese Datei abfragen. 'Subprocess' wurde erfunden, um Ihnen diesen Schmerz zu ersparen, aber es scheint, als hätten Sie keine Wahl. Viel Glück. –
_ "es beendet zuerst den Prozess und speichert die Ausgabe in Ergebnis" _ - das ist einfach nicht wahr. – Eric
"Zuerst wird der Prozess abgeschlossen und die Ausgabe im Ergebnis gespeichert" - das stimmt einfach nicht. Nun, wenn ich Popen-Befehl ausführe, läuft es weiter, bis der Prozess beendet ist und dann führt es weitere Codierung aus. Wenn es anders geht, bin ich gespannt darauf. – Niyojan