Ответ 1
Я протестировал это на своей машине Windows, и он работает, если вы укажете exe python:
C:\>C:\Python25\python.exe output.py | C:\Python25\python.exe input.py
Give me the greeting. The greeting is: hello
Но я получаю EOFError также, если вы запускаете команды непосредственно как:
output.py | input.py
Я точно не знаю, почему это так, я все еще смотрю на это, но, по крайней мере, это покажет вам обходной путь. Возможно, это связано с тем, как вызывается обработчик файлов для .py файлов.
ОБНОВЛЕНИЕ: ну, что вы знаете. Похоже, это на самом деле ошибка в Windows, где перенаправление stdin/stdout может не работать должным образом при запуске из ассоциации файлов. Итак, обходной путь, как заметил я и Патрик, вам нужно указать, что "python" будет работать с input.py, иначе он не будет перенаправлять stdout с output.py на stdin для input.py правильно.
Ссылка:
http://mail.python.org/pipermail/python-bugs-list/2004-August/024923.html
http://support.microsoft.com/default.aspx?kbid=321788
ОБНОВЛЕНИЕ 2:
Чтобы изменить это поведение и заставить Windows-трубы работать как ожидалось для перенаправления stdin/stdout, вы можете добавить это значение в реестр (проверено на моем ящике и проверено это работает по желанию).
- Запустите редактор реестра.
Найдите и выделите следующий раздел реестра:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer,
В меню "Правка" выберите "Добавить значение", а затем добавьте следующее значение реестра:
Имя значения: InheritConsoleHandles
Тип данных: REG_DWORD
Radix: Decimal
Данные значения: 1Закройте редактор реестра.