Вы не должны делать это при запуске программы так, как вы это сделали - python process.py > output.txt
. Измените способ, которым ваша программа принимает выходной файл, на python process.py output.txt
.
При > output.txt
ваша программа записывает в sys.stdout
. Это не бизнес вашей программы, что происходит с этими данными дальше - это бизнес пользователя.Это интерфейс стандартных потоков, и вы подписываетесь на это при их использовании.
Даже если вы сможете каким-то образом устранить это ограничение, это нарушит интерфейс (что сделает вашу программу проблемной) и ненадежным (например,вывод может быть не в файл, а в любое другое количество возможных мест назначения в зависимости от ОС).
И наоборот, если вы примете выходной файл в качестве аргумента, нет никаких ограничений на то, что вам разрешенопоступайте с ним, пока ваша программа работает - помимо того, что вы сами гарантируете в документации к вашей программе.Например, если это «выходной файл», вы только обещаете пользователю, что после завершения вашей программы этот файл будет иметь свои «выходные данные».
Тем не менее, чтение из «выходного файла» все еще редкость,и вам нужно явно указать, что вы можете сделать это в справке вашей программы - потому что это означает, что пользователь должен убедиться, что адресат также бесконечно читаемый, а не просто записываемый (например, он может передать его именованная труба в противном случае).