stdout, вместо того чтобы предоставлять какой-то API, пригодный для использования в программе (например, возвращать строку).Вместо того чтобы рефакторить такой код, вы можете использовать менеджер контекста
contextlib.redirect_stdout, который позволяет временно перенаправить stdout в любой объект, похожий на файл. В связке с io.StringIO это позволяет захватывать вывод в переменную.
from contextlib import redirect_stdout
from io import StringIO
s = StringIO()
with redirect_stdout(s):
print(42)
print(s.getvalue())
Также доступен
contextlib.redirect_stderr для перенаправления sys.stderr.👉@BookPython