[Python-de] subprocess Ausgaben in "Echtzeit" verarbeiten

"Martin v. Löwis" martin at v.loewis.de
Di Nov 11 23:03:28 UTC 2008


> Aber dann verstehe ich etwas grundsätzlich nicht. Wenn das Programm in
> der Eingabeaufforderung gestartet wurde, sehe ich doch auch die Ausgabe
> direkt und nicht erst dann, wenn der Puffer voll ist, oder ein flush
> gemacht wurde.

Wie Sebastian erklärt: das Programm ruft isatty - das ist (letztlich)
ein Systemruf, der bei einem Terminal "ja" und bei einer Pipe "nein"
sagt.

> Ich kann das Verhalten also nicht mit Python "nachbauen"?

Du kannst das Verhalten nicht mit dem Windows API nachbauen - auch
nicht, wenn das andere Ende der Pipe in C oder Assembler geschrieben
wäre. Du müsstest schon Windows selbst ändern (konkret: GetFileType)

cygwin emuliert pseudo-terminals irgendwie mit named-pipes. Dazu
werden ein paar Hilfsthreads gestartet, SetNamedPipeHandleState
aufgerufen usw. - mir ist allerdings nicht klar, was sie damit letztlich
erreichen (wohl im Wesentlichen, dass mehrere Prozesse gleichzeitig
/dev/pty/foo öffnen können). Ob das bei der Puffering von msvcrt hilft,
weiß ich nicht - wohl eher nur bei der Pufferung in cygwin-Prozessen.

Ciao,
Martin



Mehr Informationen über die Mailingliste python-de