On 23/11/2010 20:59, Burton Samograd wrote:
Chris Rebert<c...@rebertia.com>  writes:

On Tue, Nov 23, 2010 at 11:53 AM, Burton Samograd<bur...@userful.com>  wrote:
Hello,

I was wondering if there is any way in python to 'collect output to
string' as in some lisps/schemes.  Output being, printed output to the
console using print.

Rebind sys.stdout to a StringIO object.
http://docs.python.org/library/sys.html#sys.stdout
http://docs.python.org/library/stringio.html

Thanks for the tip.  Here's my function:

def with_output_to_string(f, args):
      oldstdout = sys.stdout
      buffer = StringIO.StringIO()
      sys.stdout = buffer
      apply(f, args)
      sys.stdout = oldstdout
      return buffer.getvalue()

Any way I could improve it?

Use a try...finally block in an exception occurs:

    try:
       apply(f, args)
    finally:
        sys.stdout = oldstdout

and possibly also replace the older:

    apply(f, args)

with the newer:

    f(*args)

You might also want to handle keyword arguments.
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to