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

Это работает на 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. Но это было давным-давно. И это не упоминает решения.

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

21
задан Piotr Dobrogost 3 October 2012 в 20:23
поделиться

3 ответа

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

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

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

17
ответ дан 29 November 2019 в 21:41
поделиться

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

0
ответ дан 29 November 2019 в 21:41
поделиться

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

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

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

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

Якобы все.

8
ответ дан 29 November 2019 в 21:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: