subprocess Rückgabe zeilenweise auslesen
Verfasst: Montag 30. Juni 2008, 20:54
Hallo
Bei meinem traceRoute-Programm mit Ortsangabe rufe ich intern ein traceroute auf und parse dessen Rückgabe werte. Bisher warte ich per process.wait() auf das Ende der Ausführung, lese dann die Rückgabe, verarbeite sie weiter und zeige alles an.
Beim traceRoute tröpflen die Ergebnisse aber eher einzeln herrein, so dass mein Programm erst mal nichts von sich gibt und danach alles ausgibt. Wenn das traceroute aber nicht terminiert, oder eine Minute auf einen Router wartet, bekomme ich davon nichts mit und sehe auch nicht, welche Router schon durchlaufen wurden, und wo es hängt.
Jetzt würde ich also gerne eine Zeile sofort verarbeiten. Mein Ansatz war jetzt, auf das process.wait() zu verzichten und alle halbe Sekunde per communicate auf die Ausgabe zuzugreifen. Komischerweise bekomme ich trotzdem alle Zeilen auf einmal oder eben gar nicht.
Vielleicht werden die Daten zwischengespeichert, aber ein process.strout.flush() liefert einen IOError: Bad File descriptor.
Das ist mein erster Kontakt mit subprocess und so langsam gehen mir die Ideen aus.
Nikolas
Bei meinem traceRoute-Programm mit Ortsangabe rufe ich intern ein traceroute auf und parse dessen Rückgabe werte. Bisher warte ich per process.wait() auf das Ende der Ausführung, lese dann die Rückgabe, verarbeite sie weiter und zeige alles an.
Beim traceRoute tröpflen die Ergebnisse aber eher einzeln herrein, so dass mein Programm erst mal nichts von sich gibt und danach alles ausgibt. Wenn das traceroute aber nicht terminiert, oder eine Minute auf einen Router wartet, bekomme ich davon nichts mit und sehe auch nicht, welche Router schon durchlaufen wurden, und wo es hängt.
Jetzt würde ich also gerne eine Zeile sofort verarbeiten. Mein Ansatz war jetzt, auf das process.wait() zu verzichten und alle halbe Sekunde per communicate auf die Ausgabe zuzugreifen. Komischerweise bekomme ich trotzdem alle Zeilen auf einmal oder eben gar nicht.
Vielleicht werden die Daten zwischengespeichert, aber ein process.strout.flush() liefert einen IOError: Bad File descriptor.
Das ist mein erster Kontakt mit subprocess und so langsam gehen mir die Ideen aus.
Nikolas