
Случается так, что некий код (возможно, не ваш) пишет в стандартный вывод какую-то нужную информацию. Ее нетрудно перехватить с помощью функции 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 👈