Dialog with a process via subprocess.Popen blocks forever
Gabriel Genellina
gagsl-py2 at yahoo.com.ar
Mon Mar 5 20:03:25 EST 2007
En Fri, 02 Mar 2007 14:38:59 -0300, Donn Cave <donn at u.washington.edu>
escribió:
> In article <mailman.4595.1172792873.32031.python-list at python.org>,
> "Gabriel Genellina" <gagsl-py2 at yahoo.com.ar> wrote:
>
>> On http://docs.python.org/lib/popen2-flow-control.html there are some
>> notes on possible flow control problems you may encounter.
>
> It's a nice summary of one problem, a deadlock due to full pipe
> buffer when reading from two pipes. The proposed simple solution
> depends too much on the cooperation of the child process to be
> very interesting, though. The good news is that there is a real
> solution and it isn't terribly complex, you just have to use select()
> and UNIX file descriptor I/O. The bad news is that while this is
> a real problem, it isn't the one commonly encountered by first
> time users of popen.
More bad news: you can't use select() with file handles on Windows.
>> If you have no control over the child process, it may be safer to use a
>> different thread for reading its output.
>
> Right - `I used threads to solve my problem, and now I have two
> problems.' It can work for some variations on this problem, but
> not the majority of them.
Any pointers on what kind of problems may happen, and usual solutions for
them?
On Windows one could use asynchronous I/O, or I/O completion ports, but
neither of these are available directly from Python. So using a separate
thread for reading may be the only solution, and I can't see why is it so
bad. (Apart from buffering on the child process, which you can't control
anyway).
--
Gabriel Genellina
More information about the Python-list
mailing list