communicate() - wie groß ist der buffer?

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
edwood
User
Beiträge: 8
Registriert: Montag 9. März 2009, 11:55

hi, ich versuche über subprocess.Popen commandos auszuführen, ich will aber auch den output mitloggen, dazu hätte ich dann einfach communicate[0] verwendet, also so in etwa:

Code: Alles auswählen

out=subprocess.Popen(cmd.split(), stdout=subprocess.PIPE,  stderr=subprocess.PIPE).communicate[0]
problem ist nur dass der output bis zu 3Mb groß wird und in der python doc steht bei communicate:
Note: The data read is buffered in memory, so do not use this method if the data size is large or unlimited.
siehe: http://docs.python.org/library/subproce ... ommunicate

was heißt jetzt "large"? ist 3Mb large? das ganze läuft unter windows UND linux so nebenbei
lunar

Drei MB sind heute nicht mehr "large" ;)

".communicate()" liest die gesamte Ausgabe des Prozesses und wartet, bis der Prozess beendet ist. Erzeugt der Prozess in seiner Lebenszeit drei MB an Ausgabe, dann gibt ".communicate()" auch drei MB Daten zurück.

Um die Ausgabe schrittweise zu lesen, kannst du die Attribute ".stdout" und ".stderr" direkt lesen. Wenn du aber die Daten geschlossen als Datenblock verarbeiten willst, musst du die drei MB so oder so speichern, also kannst du auch direkt ".communicate()" nutzen.
Antworten