Hallo,
ich starte ein Programm mit:
handle=subprocess.Popen(cmd,stdout=subprocess.PIPE)
und lese den output, wenn es fertig ist mit:
result=handle.stdout.readlines()
um den stdout nach fehlern zu checken.
Das Problem ist nun, dass der output dann aber in der console nicht mehr in realtime angezeitgt wird (ein fortschrittsbalken waehrend das programm laeuft). Kann ich irgendwie beides haben, also nen realtime output nun am ende dann alles, was er ausgespuckt hat?
Gruss
Sebastian
subprocess redirect
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
In welcher Konsole?SElsner hat geschrieben: Das Problem ist nun, dass der output dann aber in der console nicht mehr in realtime angezeitgt wird
Ich dachte es wird nichts mehr angezeigt?(ein fortschrittsbalken waehrend das programm laeuft)
Bitte präzisiere doch mal die Anfrage.
Ok, ein funktionierendes Beispiel:
kopiere das hier bitte in eine bat datei, die in c:\test.bat liegt.
choice /d y /t 2 > NUL
echo hallo
choice /d y /t 2 > NUL
die bat wartet zuerst zwei sekunden, gibt dann hallo aus und wartet dann wieder zwei sekunden.
der code fuehrt die bat aus.
dabei springt ein dos fenster auf. in diesem fenster wuerde ich gerne das "hallo" aus der bat lesen, aber ich sehe nichts. weil der output nicht mehr ins fenster geht sondern in stdout. Ich haette aber gerne, dass sowohl im fenster geprinted wird, als auch gleichzeitig ins stdout geschrieben wird, so dass ich den output nach ende des programms auslesen kann.
gruss
Sebastian[/quote]
kopiere das hier bitte in eine bat datei, die in c:\test.bat liegt.
choice /d y /t 2 > NUL
echo hallo
choice /d y /t 2 > NUL
die bat wartet zuerst zwei sekunden, gibt dann hallo aus und wartet dann wieder zwei sekunden.
der code fuehrt die bat aus.
Code: Alles auswählen
import subprocess
h=subprocess.Popen("C:\\test.bat",stdout=subprocess.PIPE)
res=h.stdout.readlines()
print res
gruss
Sebastian[/quote]
- b.esser-wisser
- User
- Beiträge: 272
- Registriert: Freitag 20. Februar 2009, 14:21
- Wohnort: Bundeshauptstadt B.
Wie passt denn
Wenn du dem Programm beim arbeiten zuschauen willst, musst du das auch machen , d.h. während das Programm läuft, dessen stdout auslesen und verarbeiten, bzw. ausgeben.
Falls dir aber niemand helfen kann, poste mehr Code!
hth, Jörg
edit:(Ich hätte doch 'vorschauen' sollen)
AFAIK geht das was dir vorschwebt nur über ein tempfile/socket, also einen weiteren 'Dateidescriptor' oder mit sowas wie dem Windows-Äquivalent zu 'tee'.
Kann dein Pythonprogramm nicht kurz das Terminal für die Ausgaben zur Verfügungstellen?
Dann brauchst du nur den stdout vom subprocess.Popen zeilenweise zu lesen, speichern und ausgeben (ggf. in einem extra threading.Thread)
undSElsner hat geschrieben:und lese den output, wenn es fertig ist mit:
zusammen?SElsner hat geschrieben:Das Problem ist nun, dass der output dann aber in der console nicht mehr in realtime angezeigt wird
Wenn du dem Programm beim arbeiten zuschauen willst, musst du das auch machen , d.h. während das Programm läuft, dessen stdout auslesen und verarbeiten, bzw. ausgeben.
Falls dir aber niemand helfen kann, poste mehr Code!
hth, Jörg
edit:(Ich hätte doch 'vorschauen' sollen)
Das Fenster ist stdout - wenn das batchfile 'allein' läuft.dabei springt ein dos fenster auf. in diesem fenster wuerde ich gerne das "hallo" aus der bat lesen, aber ich sehe nichts. weil der output nicht mehr ins fenster geht sondern in stdout. Ich haette aber gerne, dass sowohl im fenster geprinted wird, als auch gleichzeitig ins stdout geschrieben wird, so dass ich den output nach ende des programms auslesen kann.
AFAIK geht das was dir vorschwebt nur über ein tempfile/socket, also einen weiteren 'Dateidescriptor' oder mit sowas wie dem Windows-Äquivalent zu 'tee'.
Kann dein Pythonprogramm nicht kurz das Terminal für die Ausgaben zur Verfügungstellen?
Dann brauchst du nur den stdout vom subprocess.Popen zeilenweise zu lesen, speichern und ausgeben (ggf. in einem extra threading.Thread)