Питон новичок здесь. Я пишу скрипт, который может выводить некоторый вывод либо в файл, либо в стандартный вывод, в зависимости от переданных ему аргументов. При интерпретации аргументов я присваиваю файл open
или stdout
глобальной переменной с именем output_file
, которая может использоваться остальной частью скрипта для записи вывода независимо от того, какой тип потока был выбран. В самом конце сценария я close
output_file
. Это правильно для файлового потока, и хотя это избыточно для stdout, мой опыт работы с другими языками программирования показывает, что нет вреда в явном закрытии stdout непосредственно перед завершением программы.
Однако всякий раз, когда стандартный вывод используется для вывода (и впоследствии закрывается), я получаю «ValueError: 'Операция ввода-вывода в закрытом файле'». Я знаю, что эта ошибка не вызвана моим вызовом close stdout напрямую, но возникает после возврата моего сценария. Мой вопрос: почему это происходит, и есть ли способ вручную закрыть стандартный вывод, не запуская его? (Я знаю, что могу легко обойти проблему, условно закрывая поток только тогда, когда файл был выбран, но я хочу знать, нужно ли/почему это необходимо.)
Очень простой демонстрационный фрагмент:
from sys import stdout
stdout.close()