read stdout/stderr without blocking
renting at astron.nl
Wed Sep 14 10:09:00 CEST 2005
Please note that popen uses pipes, which are block devices, not character devices, so the writes will be done in blocks instead of characters/lines, (you can only read something _after_ the application at the other end of the pipe has done a flush or written 8192 bytes.
When reading from a pty like pexpect does, your read will not block until the stdio block buffer is filled.
Maybe using popen is your problem? The FAQ of Pexpect explains the problem very clearly.
>>>Jacek Pop*awski <jpopl at interia.pl> 09/13/05 4:36 pm >>>
|Grant Edwards wrote:
|>You're right. I must have been remembering the behavior of a
|>network socket. Apparently, you're supposed to read a single
|>byte and then call select() again. That seems pretty lame.
|I created another thread with single read(), it works, as long as I have
| only one PIPE (i.e. stderr is redirected into stdout).
|I wonder is it Python limitation or systems one (I need portable solution)?
More information about the Python-list