Generalize test.test_support.test_stdout() with a base context manager so that

it is easy to capture stderr if desired.
This commit is contained in:
Brett Cannon 2008-04-01 12:37:43 +00:00
parent d48a2f77f0
commit 8d2a90af2d
1 changed files with 11 additions and 7 deletions

View File

@ -392,19 +392,23 @@ def transient_internet():
@contextlib.contextmanager
def captured_stdout():
"""Run the with statement body using a StringIO object as sys.stdout.
Example use::
def captured_output(stream_name):
"""Run the 'with' statement body using a StringIO object in place of a
specific attribute on the sys module.
Example use (with 'stream_name=stdout')::
with captured_stdout() as s:
print "hello"
assert s.getvalue() == "hello"
"""
import StringIO
orig_stdout = sys.stdout
sys.stdout = StringIO.StringIO()
yield sys.stdout
sys.stdout = orig_stdout
orig_stdout = getattr(sys, stream_name)
setattr(sys, stream_name, StringIO.StringIO())
yield getattr(sys, stream_name)
setattr(sys, stream_name, orig_stdout)
def captured_stdout():
return captured_output("stdout")
#=======================================================================