Python Interactive Shell - outputting to stdout?
steve at holdenweb.com
Mon Dec 27 16:21:25 CET 2004
Steve Holden wrote:
> Avi Berkovich wrote:
>> I can't make it work, I don't get any data from either stdout nor stderr.
>> If I send lines and then close the stdin pipe, I may get an exception
>> message from several lines up.
>> I tried manually reading from the stdout pipe, but it just blocks and
>> hangs no matter what I send over via the stdin pipe.
>> This behavior isn't presented by the command line interpreter by any
>> Any suggestions?
> Yes: post your code along with messages (if any)!
Sorry, for some reason I can no longer find the message you posted the
code in -- it didn't get correctly threaded in Mozilla. Anyway, I can't
say that I exactly understand what's going on, but here are a couple of
1. The interpreter performs buffering even when running in interactive
mode unless it can see a terminal (which here it can't). Hence adding a
"-u" to the interpreter command line is useful.
2. There's a problem with your stop condition, which is why the attached
modified version sleeps before closing the pipe to the interpreter.
def __init__(self, readPipe, output):
if not isinstance(readPipe, file):
raise TypeError, "readPipe parameter must be of File type"
#if not isinstance(output, file):
# raise TypeError, "output parameter must be of File type"
self.readPipe = readPipe
self.output = output
self.toStop = False
while not self.toStop and not self.readPipe.closed:
read = self.readPipe.readline()
self.toStop = True
if __name__ == "__main__":
r, w = popen2.popen4('c:\\python24\\python.exe -u')
piper = Piper(r, sys.stdout)
import time; time.sleep(2)
#import time; time.sleep(3)
Various other bits and pieces of messing about didn't really yield any
useful conclusions, so I pass this on only in the hope that you may be
more motivated to follow up now you can actually see some interpreter
output. I would have thought the flush() calls would have made output
appear one line at a time, but sadly they do not.
Steve Holden http://www.holdenweb.com/
Python Web Programming http://pydish.holdenweb.com/
Holden Web LLC +1 703 861 4237 +1 800 494 3119
More information about the Python-list