contextlib.redirect_stdout
Менеджер контекста, временно направляющий stdout в указанный файлоподобный объект.
contextlib.redirect_stdout(target)
target -- Цель, файлоподобный объект, куда следует перенаправить stdout.
Перенаправит
Может быть полезен для использования со сторонним кодом, который использует только стандартный вывод
В примере ниже help() использует
sys.stdout
в файлоподобный объект.Может быть полезен для использования со сторонним кодом, который использует только стандартный вывод
stdout
.На заметку
Из-за «глобальной» природы
sys.stdout
не стоит использовать данный менеджер в коде библиотек и в подавляющем большинстве программ с нитями. Кроме того, он не работает с выводом подпроцессов (см. subprocess
). В примере ниже help() использует
sys.stdout
, однако при помощи рассматриваемого менеджера, можно перенаправить вывод в io.StringIO
, в файл на диск, или в sys.stderr
: # В строку help_output.
out = io.StringIO()
with redirect_stdout(out):
help(pow)
help_output = out.getvalue()
# В файл на диске.
with open('help.txt', 'w') as help_file:
with redirect_stdout(help_file):
help(pow)
# В stderr.
with redirect_stdout(sys.stderr):
help(pow)
На заметку
Созданный объект менеджера является реентерабельным. Это означает, что в рамках одного блока
with
, имеющего такие же вложенные блоки, его можно использовать несколько раз.
Синонимы поиска: contextlib.redirect_stdout, contextlib, redirect_stdout
На заметку
У нас есть новостная группа в Telegram. Там же можно обсудить интересующие вопросы. Ссылка в самом низу страницы.