En Sun, 14 Dec 2008 09:37:38 -0200, Emanuele D'Arrigo <man...@gmail.com>
escribió:
On Dec 14, 4:48 am, "Gabriel Genellina" <gagsl-...@yahoo.com.ar>
wrote:
- you have to close server.stdin when you don't have more data to send.
The server will see an end-of-file and knows it has to exit the loop.
Same thing on the client side.
Hi Gabriel, thanks for modifying the code to make it work. I've just
tried tinkering with it to see how far it would go. On your two
statements above: does this means that any data must be sent in one
batch and then the subprocess must shut down? What I was trying to
simulate is a client/server relationship through a subprocess, where
the server (the subprocess) keeps listening and the client sends data
when it wants to (and eventually viceversa). But when the
server.stdin.close() statement is issued, the pipe is closed for good
and can't be reopened (can it?).
No, not at all. You can keep writing things to the pipe - as long as the
read side keeps reading, there is no limit on how much data you can send.
Just make sure you close the writing side of the pipe when you have no
more data to send, to signal the other side it's OK to exit the read loop.
- you have to wait until the server answers, else it will get a "broken
pipe" error or similar.
So, if I want to interrogate the subprocess multiple times I must end
and restart the ListenerThread multiple times then?
No, I mean, since your example is bidirectional, the parent process must
still be alive and able to read when the subprocess replies. Given this
sequence:
parent writes "hi sub!"
child reads "hi sub!"
child writes "hi dad!"
parent reads "hi dad!"
if the parent just exits after sending "hi sub!", the child will get an
error when replying (I think it says "invalid handle" on Windows, "broken
pipe" on Linux, or something like this).
--
Gabriel Genellina
--
http://mail.python.org/mailman/listinfo/python-list