import contextlib contextlib.redirect_stdout(new_target) contextlib.redirect_stderr(new_target)
new_target
- объект перенаправления выводаsys.stdout
или sys.stderr
.Функции contextlib.redirect_stdout()
и contextlib.redirect_stderr()
представляют собой менеджеры контекста для временного перенаправления sys.stdout
или sys.stderr
соответственно в другой файл или файловый объект.
Этот инструмент добавляет гибкость существующим функциям или классам, чей вывод жестко привязан к stdout
или stderr
.
Обратите внимание, что глобальный побочный эффект для sys.stdout
означает, что этот менеджер контекста не подходит для использования в коде библиотеки и большинстве многопоточных приложений. Это также не влияет на вывод подпроцессов. Тем не менее, это все еще полезный подход для многих служебных скриптов.
По поведению этот контекстный менеджер будет контекстным менеджером c повторным входом.
Вывод функции help()
обычно отправляется в sys.stdout
. Можно записать этот вывод в строку, перенаправив вывод в объект io.StringIO
:
import contextlib, io s = io.StringIO() with contextlib.redirect_stdout(s): help(pow) >>> s.getvalue()[:50] # 'Help on built-in function pow in module builtins:\n'
Чтобы отправить вывод функции help()
в файл на диске, нужно перенаправить вывод в обычный файл:
with open('help.txt', 'w') as fp: with contextlib.redirect_stdout(fp): help(pow)
Чтобы отправить вывод help()
в sys.stderr
:
import contextlib, sys with redirect_stdout(sys.stderr): help(pow)