これをWindowsマシンでテストしましたが、Pythonexeを指定すると機能します。
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リダイレクトが正しく機能しない場合があります。したがって、回避策は私とPatrickが指摘したとおりです。「python」がinput.pyを実行するように指定する必要があります。そうしないと、stdoutがoutput.pyからinput.pyのstdinに正しくリダイレクトされません。
参照:
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
基数:10進
値のデータ:1
レジストリエディタを終了します。