1import contextlib 2import sys 3from io import StringIO 4 5 6@contextlib.contextmanager 7def capture_stdout(target=None): 8 original = sys.stdout 9 if target is None: 10 target = StringIO() 11 sys.stdout = target 12 yield target 13 target.seek(0) 14 sys.stdout = original 15 16 17@contextlib.contextmanager 18def capture_stderr(target=None): 19 original = sys.stderr 20 if target is None: 21 target = StringIO() 22 sys.stderr = target 23 yield target 24 target.seek(0) 25 sys.stderr = original 26