Python 3.4+contextlibпонятие
contextlib.redirect_stdout
перенаправление
Контекстный менеджер: временно перенаправляет sys.stdout в указанный файловый объект.
Синтаксис
with contextlib.redirect_stdout(target): ...
Подмена глобальная: пока блок with активен, перенаправлен sys.stdout у всей программы, включая другие потоки — поэтому в библиотечном коде и многопоточных приложениях так делать не стоит. На вывод дочерних процессов и кода на C, пишущего прямо в дескриптор 1, это не влияет: перехватывается только то, что идёт через sys.stdout. Для ошибок есть парный redirect_stderr, а типичное применение — тесты и захват вывода чужой функции, которая печатает вместо того, чтобы возвращать значение.
Примеры
import contextlib, io
buf = io.StringIO()
with contextlib.redirect_stdout(buf):
print('hi')
print(buf.getvalue().strip()) # → hi
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности