Я протестировал это на моей машине с Windows, и она работает, если вы указываете Python exe:
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
Корень: десятичный
Значение данных: 1
Закройте редактор реестра.