class Data(object):
    pass

@contextlib.contextmanager
def capture_stdout():
    old = sys.stdout
capturer = StringIO.StringIO()
sys.stdout = capturer
data = Data()
yield data
sys.stdout = old
data.result = capturer.getvalue()
Захват stdout в том же процессе в Python