Не удается перенаправить вывод, когда я запускаю Python script в Windows, используя только имя script

Это работает на Windows 7 (64-разрядная версия), Python 2.6 с расширениями Win32 для Python.

У меня есть простой script, который просто печатает "hello world". Я могу запустить его с помощью python hello.py. В этом случае я могу перенаправить вывод в файл. Но если я запустил его, просто набрав hello.py в командной строке и перенаправляя вывод, я получаю исключение.

C:> python hello.py
hello world

C:> python hello.py >output

C:> type output
hello world

C:> hello.py
hello world

C:> hello.py >output
close failed in file object destructor:
Error in sys.excepthook:

Original exception was:

Я думаю, что сначала получаю эту ошибку после обновления до Windows 7. Я помню, что она должна работать в XP. Я видел, как люди говорили об этой ошибке python-Bugs-1012692 | Невозможно выполнить вход в программу python. Но это было давно. И он не упоминает о каком-либо решении.

Кто-нибудь испытал это? Кто может помочь?

Ответ 1

Вы спрашиваете об этом?

Windows: при выполнении сценариев Python в командной строке с использованием типа файла         ассоциации (то есть запуск "script.py" вместо "python script.py" )         перенаправления могут не работать, если вы не установите конкретный раздел реестра. Видеть         статья базы знаний Перенаправление STDIN/STDOUT может не работать, если вы начинаете с файловой ассоциации.

Это в Python README. Возможно, этот патч - это то, что вы ищете.

Ответ 2

ОБНОВЛЕННЫЙ ОТВЕТ

Проблема с Microsoft KB (Перенаправление STDIN/STDOUT может не работать, если оно запущено из файловой ассоциации) может быть именно этой проблемой. На странице есть инструкции по загрузке исправления Win2000, но это может быть не нужно для более поздних версий Windows. После исправления (или, возможно, без него, в зависимости от вашей версии Win) требуется ручное редактирование реестра.

Вы должны проверить ссылку, которую я предоставил; в любом случае, я резюмирую здесь:

  • Откройте редактор реестра и найдите ключ HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
  • Добавьте значение DWORD с именем InheritConsoleHandles и установите его на 1.

Что это, предположительно.

Ответ 3

Я не знаю об этой проблеме, но у меня есть идея обойти ее. Вы подумали о добавлении опции командной строки (например, -o) для указания выходного файла, который будет записывать вывод?