[Python-de] Zugriff auf stdout und stderr von "externe" Prozessen unter Window

Stefan Behnel behnel_ml at gkec.informatik.tu-darmstadt.de
Don Mar 23 11:25:19 CET 2006


Martin Wisskirchen schrieb:
> ich möchte eine grafische Anwendung (Tkinter) erstellen, die 
> verschiedene Informationen sammelt und darauf hin den MS Visual Studio 
> 7.1 C++ Compiler  (Terminal) startet. Dieser gibt normalerweise seine 
> Ausgaben auch anf dem Terminal aus. Diese Ausgaben möchte ich allerdings 
> in ein Text-Widget umlenken. Dies mache ich bereits mit os.popen3 und 
> das funktioniert auch soweit. Das Problem ist allerdings, das die 
> Ausgaben erst von den Fileobjects ausgegeben werden, wenn der Compiler 
> beendet ist. Um denCompilerungsprozess zu überwachen ist dies allerdings 
> denkbar schlecht. Dies liegt wahrscheinlich daran, dass der Compuiler 
> Output seitens des Compiler-Prozesses gebuffert wird.
> Unter Unix kann man dies scheinbar (?) unter Zuhilfename von "pty" 
> verhindern, dass steht leider unter Windows nicht zur Verfügung.....
> 
> Hier der Code:
>         
>       
>        #qmakecall ruft qmake mit den zugehöhrigen Parametern auf....
> 
>          (input, output, error) = os.popen3(qmakecall)
> 
>              
>        #self.debugWindow ist das TextWidget, das übergeben wird.....
>          self.debugWindow.insert(END, input.read()) 
>          self.debugWindow.insert(END, error.read())

Hi,

nur so'n Schnellgriff in's Blaue, hast du mal versucht, ob subprocess sich
anders verhält?

http://docs.python.org/lib/module-subprocess.html

Ansonsten sehe ich an deinem Source, dass du die beiden read()s nacheinander
aufrufst. Dadurch erhälst du die zweite Ausgabe natürlich dann auch erst, wenn
stdout zu Ende gelesen wurde.

Stefan