Reassign or discard Popen().stdout from a server process
John O'Hagan
research at johnohagan.com
Fri Feb 4 10:48:55 EST 2011
On Thu, 3 Feb 2011, Nobody wrote:
> On Tue, 01 Feb 2011 08:30:19 +0000, John O'Hagan wrote:
> > I can't keep reading because that will block - there won't be any more
> > output until I send some input, and I don't want it in any case.
> >
> > To try to fix this I added:
> >
> > proc.stdout = os.path.devnull
> >
> > which has the effect of stopping the server from failing, but I'm not
> > convinced it's doing what I think it is.
>
> It isn't. os.path.devnull is a string, not a file. But even if you did:
>
> proc.stdout = open(os.path.devnull, 'w')
>
> that still wouldn't work.
As mentioned earlier in the thread, I did in fact use open(), this was a typo,
[...]
> > Is it possible to re-assign the stdout of a subprocess after it has
> > started?
>
> No.
>
> > Or just close it? What's the right way to read stdout up to a given
> > line, then discard the rest?
>
> If the server can handle the pipe being closed, go with that. Otherwise,
> options include redirecting stdout to a file and running "tail -f" on the
> file from within Python, or starting a thread or process whose sole
> function is to read and discard the server's output.
Thanks, that's all clear now.
But I'm still a little curious as to why even unsuccessfully attempting to
reassign stdout seems to stop the pipe buffer from filling up.
John
More information about the Python-list
mailing list