On Fri, 25 Jan 2008 17:31:16 +0100, Olivier Lefevre wrote:
> Thanks for the answer. Yes this is tricky. I have done it in Java
> before, where you can, e.g., set up a thread to pump stuff out of
> both stderr and stdout continuously but my python is too rudimentary
> for that.
The `trheading` module is modeled after Java's threading API.
> There is a key difference anyway: in Java you can write
>
> while (br.readLine() != null) { <pump> }
>
> where br is the buffered reader in which you've wrapped the stdout
> of the child process and it will not hang. But in python eventually
> stdout.readline() hangs. This is a real nuisance: why can't it just
> return None?
Because that would be quite annoying because most of the time people want
blocking behavior.
>> 1. The subprocess has stopped producing output.
>
> Indeed, if I do this interactively, I can tell after 3 lines that I've
> gotten all there is to get right now and the fourth readline() call
> hangs. But how can I find out *programmatically* that there is no more
> input?
You can't.
>> If you are only reading its standard output, are you sure that the
> > subprocess is flushing its buffers so you can recognize it's time to
> > provide more input?
>
> The subprocess in a purely passive position: it is an interpreter: I
> send it commands and I read the answers. The python side is in charge.
This doesn't answer if the interpreter doesn't flush its output buffer
after every line.
Ciao,
Marc 'BlackJack' Rintsch
--
http://mail.python.org/mailman/listinfo/python-list