Something that Perl can do that Python can't?

Dr. Who google at spiceaid.com
Fri Jul 22 16:36:28 EDT 2005


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




More information about the Python-list mailing list