Skip to main content
AI Assist is now on Stack Overflow. Start a chat to get instant answers from across the network. Sign up to save and share your chats.
Update 10 years later
Source Link
Jochen Ritzel
  • 108.3k
  • 33
  • 205
  • 196

I hadSince Python 3.4 there is a solution is the same idea as Frédéric, but i wrotestdlib: https://docs.python.org/3/library/contextlib.html#contextlib.redirect_stdout

from io import StringIO from contextlib import redirect_stdout f = StringIO() with redirect_stdout(f): help(pow) s = f.getvalue() 

In older versions you can write a context manager to handle replacing stdout:

import sys from io import StringIO import contextlib @contextlib.contextmanager def stdoutIO(stdout=None): old = sys.stdout if stdout is None: stdout = StringIO() sys.stdout = stdout yield stdout sys.stdout = old code = """ i = [0,1,2] for j in i : print j """ with stdoutIO() as s: exec(code) print("out:", s.getvalue()) 

I had the same idea as Frédéric, but i wrote a context manager to handle replacing stdout:

import sys from io import StringIO import contextlib @contextlib.contextmanager def stdoutIO(stdout=None): old = sys.stdout if stdout is None: stdout = StringIO() sys.stdout = stdout yield stdout sys.stdout = old code = """ i = [0,1,2] for j in i : print j """ with stdoutIO() as s: exec(code) print("out:", s.getvalue()) 

Since Python 3.4 there is a solution is the stdlib: https://docs.python.org/3/library/contextlib.html#contextlib.redirect_stdout

from io import StringIO from contextlib import redirect_stdout f = StringIO() with redirect_stdout(f): help(pow) s = f.getvalue() 

In older versions you can write a context manager to handle replacing stdout:

import sys from io import StringIO import contextlib @contextlib.contextmanager def stdoutIO(stdout=None): old = sys.stdout if stdout is None: stdout = StringIO() sys.stdout = stdout yield stdout sys.stdout = old code = """ i = [0,1,2] for j in i : print j """ with stdoutIO() as s: exec(code) print("out:", s.getvalue()) 
Update to Python 3. Python 2 is deprecated
Source Link
oak
  • 3k
  • 3
  • 36
  • 65

I had the same idea as Frédéric, but i wrote a context manager to handle replacing stdout:

import sys from io import StringIO import contextlib @contextlib.contextmanager def stdoutIO(stdout=None): old = sys.stdout if stdout is None: stdout = StringIO.StringIO() sys.stdout = stdout yield stdout sys.stdout = old code = """ i = [0,1,2] for j in i : print j """ with stdoutIO() as s: exec (code) print ("out:", s.getvalue()) 

I had the same idea as Frédéric, but i wrote a context manager to handle replacing stdout:

import sys import StringIO import contextlib @contextlib.contextmanager def stdoutIO(stdout=None): old = sys.stdout if stdout is None: stdout = StringIO.StringIO() sys.stdout = stdout yield stdout sys.stdout = old code = """ i = [0,1,2] for j in i : print j """ with stdoutIO() as s: exec code print "out:", s.getvalue() 

I had the same idea as Frédéric, but i wrote a context manager to handle replacing stdout:

import sys from io import StringIO import contextlib @contextlib.contextmanager def stdoutIO(stdout=None): old = sys.stdout if stdout is None: stdout = StringIO() sys.stdout = stdout yield stdout sys.stdout = old code = """ i = [0,1,2] for j in i : print j """ with stdoutIO() as s: exec(code) print("out:", s.getvalue()) 
Source Link
Jochen Ritzel
  • 108.3k
  • 33
  • 205
  • 196

I had the same idea as Frédéric, but i wrote a context manager to handle replacing stdout:

import sys import StringIO import contextlib @contextlib.contextmanager def stdoutIO(stdout=None): old = sys.stdout if stdout is None: stdout = StringIO.StringIO() sys.stdout = stdout yield stdout sys.stdout = old code = """ i = [0,1,2] for j in i : print j """ with stdoutIO() as s: exec code print "out:", s.getvalue()