subprocess Rückgabe zeilenweise auslesen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Nikolas
User
Beiträge: 102
Registriert: Dienstag 25. Dezember 2007, 22:53
Wohnort: Freiburg im Breisgau

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
Erwarte das Beste und sei auf das Schlimmste vorbereitet.
BlackJack

`communicate()` kannst Du nur einmal Aufrufen, dann läuft das gesamte Programm ab.

Wenn Dir einfaches Iterieren über die Ausgabe des Prozesses nicht ausreicht, dann kämpfst Du vermutlich dagegen, dass das aufgerufene Programm seine Ausgabe puffert. Wogegen man mit `subprocess` nichts machen kann. Da müsste man dann zu `pexpect` greifen.
Nikolas
User
Beiträge: 102
Registriert: Dienstag 25. Dezember 2007, 22:53
Wohnort: Freiburg im Breisgau

Schade. Das ganze war eigentlich nur eine kleine Idee für nebenbei und für eine neue Bibliothek habe ich leider keine Zeit.

Wenn ich mich mal wieder dransetze, werde ich mir pexpect mal anschauen, wahrscheinlich kann ich es dann häufiger einsetzen.

Bis dahin werde ich wohl ein einfaches traceroute durchführen und danach noch mein tracePlus durchlaufen lassen und mir die Städte anschauen.

Teilweise sind die Wege wirklich komisch....
Erwarte das Beste und sei auf das Schlimmste vorbereitet.
Antworten