Допустим, вы используете интерактивное приглашение Python и используете модуль, который вы не можете полностью контролировать / переписывать, выводя результаты прямо на экран.
Если вам нужно сохранить в файл некоторые из этих выходных данных (возможно, вы хотите просмотреть результаты в интерактивном режиме и поиграть с некоторыми параметрами перед передачей результатов в файл), вы можете сделать следующее
15:14 boffi@debian:~ $ python
Python 3.6.5 |Anaconda, Inc.| (default, Apr 29 2018, 16:14:56)
[GCC 7.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> def f(): print('Hi Charlotte!')
>>> f()
Hi Charlotte!
>>> with open('a_file.txt', 'w') as sys.stdout:
... f()
Как вы можете видеть (если вы попробуете мой код ...), второй вызов функции ничего не печатает, и мы можем видеть содержимое a_file.txt
из оболочки
15:16 boffi@debian:~ $ cat a_file.txt
Hi Charlotte!
Полагаю, это то, что тебе нужно.
И если вы хотите знать, как это работает ... Сначала вы import sys
, это стандартный модуль библиотеки, взаимодействующий с системой, и когда вы хотите зафиксировать вывод метода, вы временно переназначить (с помощью оператора with
) стандартный поток вывода (sys.stdout
) на объект файла. Все операторы, которые следуют в блоке с отступом with
(технически диспетчер контекста ), будут печататься не на терминале, а в файле. Еще одна неприятность, когда вы изменяете свой код 1. , файл автоматически закрывается и 2. print
подключаются заново с терминалом.
PS Если вы хотите добавить разные сегменты вывода в один файл, вы можете. Прочтите о функции open
, которая может открыть существующий файл в режиме append .