polling for output from a subprocess module
Ivo
noreply at ivonet.nl
Tue Feb 5 15:55:20 EST 2008
Thomas Bellman wrote:
> jakub.hrozek at gmail.com wrote:
>
>> try:
>> test = Popen(test_path,
>> stdout=PIPE,
>> stderr=PIPE,
>> close_fds=True,
>> env=test_environ)
>
>> while test.poll() == None:
>> ready = select.select([test.stderr], [], [])
>
>> if test.stderr in ready[0]:
>> t_stderr_new = test.stderr.readlines()
>> if t_stderr_new != []:
>> print "STDERR:", "\n".join(t_stderr_new)
>> t_stderr.extend(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
interested.
cya
More information about the Python-list
mailing list