Das Problem wird in der FAQ von Pexpect ganz gut erklärt:
http://www.noah.org/wiki/Pexpect#Q:_Why ... 8.29.29.3F
So wie ich es verstehe:
Oft nutzten Programme die Standard C IO Library (stdio.h). Diese nutzt ein eigenen Puffer. Wenn das Programm nicht explizit ein stdout.flush() macht, dann wird erstmal der "interne" Puffer voll geschrieben und erst dann ausgegeben. Dabei weiß stdio.h ob es in eine Pipe schreibt oder in ein Terminal. In eine Pipe kommt ein "Block Puffer" zum einsatz, der größer ist, als der normale "Line Puffer".
Somit bekommt man aus der Pipe erst Daten wenn der Puffer voll ist, oder das Programm beendet ist.
Die Frage ist nun, kann man irgendwie die Puffer Größe beeinflussen und auf 1-Zeichen setzten, oder so tun als wenn man ein Terminal und nicht eine Pipe ist???
Es gibt die Angabe "bufsize" bei subprocess. Aber egal ob auf 0 oder 1 gesetzt, das änder nix, warum?
Kann man evtl. was mit startupinfo und creationflags machen???
Zum Thema Pseudo-Terminal gibt es unter Windows anscheinend nicht wirklich, siehe:
http://www.noah.org/wiki/Pexpect#pty_module
Ich hab auch diesbezüglich gesucht, aber nichts gefunden. Irgendwie kann man was mit Cygwin machen, aber das scheint mir sehr Aufwendig zu sein.
EDIT: Hab das ganze mal unter Linux getestet. Eigentlich gibt es da das selbe Problem!