On Jan 8, 1:20 am, Robert Latest <[EMAIL PROTECTED]> wrote: > Hello, > > look at this function: > > -------------- > def test(): > child = os.popen('./slow') > for line in child: > print line > ------------- > > The program "slow" just writes the numbers 0 through 9 on stdout, one line a > second, and then quits. > > I would have expected the python program to spit out a numbers one by one, > instead I see nothing for 10 seconds and then the whole output all at once. > > How can I get and process the pipe's output at the pace it is generated?
I've seen this problem and it took me a while to figure out what is happening. As other posts, I too first suspected it's a problem related to line/ full buffering on the sender side (./slow here). It turned out that the "for line in child:" line in the iterator is the culprit. The iterator does something like a child.readlines() underneath (in it's __iter__ call) instead of a more logical single line read. Change your reading to force line-by-line read e.g. While True: line = child.readline() if not line: break print line Karthik > > Thanks, > > robert -- http://mail.python.org/mailman/listinfo/python-list