Перенаправление стандартного вывода

Случается так, что некий код (возможно, не ваш) пишет в стандартный вывод какую-то нужную информацию. Ее нетрудно перехватить с помощью функции redirect_stdout из стандартного модуля contextlib.

redirect_stdout является контекст менеджером (применяется совместно с with) и принимает аргументом файло-подобный объект (это может быть и дескриптор файла, и StringIO). 

📎 Пример. Сохраним вывод функции help в строку (в интерпретаторе пример работает некорректно, запускайте с файла):

import io
from contextlib import redirect_stdout

f = io.StringIO()
with redirect_stdout(f):
  help(pow)
s = f.getvalue() 
print(s) # в s будет вывод

📎 Пример. Или в файл:

with open('help.txt', 'w') as help_file:
  with redirect_stdout(help_file):
    help(pow)   

📎 Пример. stdout в stderr:

import sys
with redirect_stdout(sys.stderr):
  help(pow)

Во время работы redirect_stdout вывод в терминал попадать не будет.

Функция redirect_stderr аналогично перехватывает вывод из стандартного потока ошибок (stderr).

🧙 Специально для канала @pyway. Подписывайтесь на мой канал в Телеграм @pyway 👈