polling for output from a subprocess module
noreply at ivonet.nl
Tue Feb 5 21:55:20 CET 2008
Thomas Bellman wrote:
> jakub.hrozek at gmail.com wrote:
>> test = Popen(test_path,
>> while test.poll() == None:
>> ready = select.select([test.stderr], , )
>> if test.stderr in ready:
>> t_stderr_new = test.stderr.readlines()
>> if t_stderr_new != :
>> print "STDERR:", "\n".join(t_stderr_new)
>> The problem is, that it seems that all the output from the subprocess
>> seems to be coming at once. Do I need to take a different approach?
> The readlines() method will read until it reaches end of file (or
> an error occurs), not just what is available at the moment. You
> can see that for your self by running:
> $ python -c 'import sys; print sys.stdin.readlines()'
> The call to sys.stdin.readlines() will not return until you press
> Ctrl-D (or, I think, Ctrl-Z if you are using MS-Windows).
> However, the os.read() function will only read what is currently
> available. Note, though, that os.read() does not do line-based
> I/O, so depending on the timing you can get incomplete lines, or
> multiple lines in one read.
be carefull that you specify how much you want to read at a time,
otherwise it cat be that you keep on reading.
Specify read(1024) or somesuch.
In case of my PPCEncoder I recompiled the mencoder subprocess to deliver
me lines that end with \n.
If anyone can tell me how to read a continues stream than I am really
More information about the Python-list