[Tutor] Something that Perl can do that Python can't?

Smith, Jeff jsmith at medplus.com
Fri Jul 22 22:36:50 CEST 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 Tutor mailing list