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