Вследствие того, что переназначение атрибутов потоков приобрело большую популярность, встроенная функция print в языке Python также была дополнена возможностью явно указывать файл для вывода. Следующая инструкция:
print(stuff, file=afile) # afile — это объект, а не имя строковой переменной
выведет stuff в afile, а не в поток sys.stdout. По своему действию это напоминает присваивание объекта переменной sys.stdout, но в данном случае отпадает необходимость сохранять и восстанавливать первоначальное значение, чтобы вернуться к использованию оригинального потока вывода (как было показано в разделе, описывающем перенаправление потоков в объекты). Например:
import sys
print(‘spam’ * 2, file=sys.stderr)
выведет текст в объект стандартного потока ошибок, а не в sys.stdout, причем такое перенаправление будет действовать только для данного вызова функции print. Следующий вызов функции print (без аргумента file) выведет текст в стандартный поток вывода, как обычно. Точно так же в качестве выходного файла можно передать свой собственный объект или экземпляр класса из стандартной библиотеки:
> >> from io import StringIO
> >> buff = StringIO()
> >> print(42, file=buff)
> >> print(‘spam’, file=buff)
> >> print(buff.getvalue())
42
spam
> >> from redirect import Output
> >> buff = Output()
>>> print(43, file=buff)
>>> print(‘eggs’, file=buff)
>>> print(buff.text)
43 eggs
Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, I том, 2011