> On Behalf Of sophie_newbie > Hi, I'm wondering if its possible to copy all of stdout's > output to a string, while still being able to print on > screen. I know you can capture stdout, but I still need the > output to appear on the screen also...
If I understand you correctly, the following class should work. from StringIO import StringIO class OutBuffer(object): """Wraps a stream, and keeps output as a buffer Usage: >>> import sys >>> sys.stdout = OutBuffer(sys.stdout) >>> print "spam" spam >>> print "egg" egg >>> sys.stdout.getvalue().splitlines() ['spam', 'egg'] """ def __init__(self, outstream): self.out = outstream self.buffer = StringIO() def write(self, obj): """Writes obj to the output stream, storing it to a buffer as well""" self.out.write(obj) self.buffer.write(obj) def getvalue(self): """Retrieves the buffer value""" return self.buffer.getvalue() def __getattr__(self, attr): """Delegate everything but write and getvalue to the stream""" return getattr(self.out, attr) Regards, Ryan Ginstrom -- http://mail.python.org/mailman/listinfo/python-list