So here it is: handle unbuffered output from a child process.

Here is the child process script (bufcallee.py):
        import time
        print 'START'
        time.sleep(10)
        print 'STOP'

In Perl, I do:
        open(FILE, "python bufcallee.py |");
        while ($line = <FILE>)
        {
            print "LINE: $line";
        }

in which case I get
        LINE: START
followed by a 10 second pause and then
        LINE: STOP

The equivalent in Python:
import sys, os

FILE = os.popen('python bufcallee.py')
for line in FILE:
    print 'LINE:', line

yields a 10 second pause followed by
        LINE: START
        LINE: STOP

I have tried the subprocess module, the -u on both the original and
called script, setting bufsize=0 explicitly but to no avail.  I also
get the same behavior on Windows and Linux.

If anyone can disprove me or show me what I'm doing wrong, it would be
appreciated.

Jeff

-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to