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