私はWindowsXPを使用しています。これはどのプロセスにも影響するようですが、Python3.2 を使用して説明します。スクリプト「filter.py」:
import sys
for line in sys.stdin:
print(line)
次のように実行します。
echo hello | filter.py
このように壊れます:
Traceback (most recent call last):
File "F:\Documents and Settings\jhartley\docs\projects\filtercwd\filter.py", line 3, in <module>
for line in sys.stdin:
TypeError: 'NoneType' object is not iterable
案の定、sys.stdin の値を検出するために print を追加すると、それが None (および NoneType) であることが報告されます。
または、次のように実行します。
echo hello | python filter.py
(pythonの明示的な呼び出しを使用して)完全に正常に動作します。
私の .py ファイルは、assoc および ftype メカニズム (特定のプログラムを使用して実行される特定のファイル名拡張子を Windows が関連付ける方法) を使用して、Python を使用して実行するように接続されています。
> assoc .py
.py=Python.File
> ftype Python.File
Python.File="F:\Python32\python.exe" "%1" %*
(これは、私のパスで最も重要な「python.exe」と同じです)
更新: これは Python の問題ではありません。filter.sh を作成し、cygwin bash を使用して実行すると、同じことが起こります。'echo hello | 明示的に実行する bash filter.sh' は問題なく動作しますが、'echo hello | assoc および ftype メカニズムを介して bash を使用して filter.sh を実行する filter.sh は、「/dev/stdin: No such file or directory」で失敗します。
それで、この明示的な「python」をすべてのコマンドラインに追加する必要がありますか? さらに、なぜ壊れているのか気になります。それは私のマシンの特殊性ですか、それとも他の人もこれを見ていますか?