Это работает на Windows 7 (64 бита), Python 2.6 с Расширениями Win32 для Python.
У меня есть простой сценарий, которые просто печатают "привет мир". Я могу запустить его с 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. Но это было давным-давно. И это не упоминает решения.
Кто-либо испытал это? Кто-либо может помочь?
Вы спрашиваете об этом?
Windows: при выполнении сценариев Python в командной строке с использованием типа файла ассоциации (т.е. запуск "script.py" вместо "python script.py"), перенаправления могут не работать, если вы не установите определенный ключ реестра. Видеть статья базы знаний Перенаправление STDIN / STDOUT может не работать, если запущено из файловой ассоциации .
Это в README Python. Возможно, этот патч - то, что вы ищете.
Я не знаю об этой проблеме, но у меня есть идея, как ее обойти. Вы не думали о том, чтобы добавить опцию командной строки (например, -o
) для указания выходного файла, который будет захватывать вывод?
ОБНОВЛЕННЫЙ ОТВЕТ
Проблема с базой знаний Microsoft ( Перенаправление STDIN / STDOUT может не работать при запуске из сопоставления файлов ) может быть именно этой проблемой. На странице есть инструкции по загрузке исправления Win2000, но оно может не понадобиться для более поздних версий Windows. После исправления (или, возможно, без него, в зависимости от вашей версии Win) требуется ручное редактирование реестра.
Вы должны проверить ссылку, которую я предоставил; в любом случае, я резюмирую здесь:
HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows \ CurrentVersion \ Policies \ Explorer
InheritConsoleHandles
и установите его на 1
. Якобы все.