F
Fuzzyman
Hello all,
Before I ask the question a couple of notes :
* This question is for implementing a script inside the Wing IDE. For
some reason using the subprocess module doesn't work so I need a
solution that doesn't use this module.
* The platform is Windows and I'm happy with a Windoze only solution.
I would like to execute subprocesses asynchronously and capture stdout
/ stderr as a single stream.
If I use "os.popen3(executable)" it gives me separate pipes for stdout
and stderr, but reads from them are blocking.
The output on stdout and stderr may be interleaved and I would like to
display them *as* they arrive. That means I can't just read from them
and output the results.
The only solution I can think of is to read from both a character at a
time on two separate threads, putting the data into a queue. A separate
thread could pull characters off the queue and display them. (I don't
need to differentiate between stdout and stderr when I display.)
Can anyone think of a better solution ?
My current code works, but *doesn't* capture stderr :
from threading import Thread
pipe = os.popen(executable)
def DisplayOutput():
while True:
output = pipe.read(1)
if not output:
break
display(output)
Thread(target=DisplayOutput).start()
All the best,
Fuzzyman
http://www.voidspace.org.uk/python/articles.shtml
Before I ask the question a couple of notes :
* This question is for implementing a script inside the Wing IDE. For
some reason using the subprocess module doesn't work so I need a
solution that doesn't use this module.
* The platform is Windows and I'm happy with a Windoze only solution.
I would like to execute subprocesses asynchronously and capture stdout
/ stderr as a single stream.
If I use "os.popen3(executable)" it gives me separate pipes for stdout
and stderr, but reads from them are blocking.
The output on stdout and stderr may be interleaved and I would like to
display them *as* they arrive. That means I can't just read from them
and output the results.
The only solution I can think of is to read from both a character at a
time on two separate threads, putting the data into a queue. A separate
thread could pull characters off the queue and display them. (I don't
need to differentiate between stdout and stderr when I display.)
Can anyone think of a better solution ?
My current code works, but *doesn't* capture stderr :
from threading import Thread
pipe = os.popen(executable)
def DisplayOutput():
while True:
output = pipe.read(1)
if not output:
break
display(output)
Thread(target=DisplayOutput).start()
All the best,
Fuzzyman
http://www.voidspace.org.uk/python/articles.shtml