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