
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