Я на 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
Достаточно, добавивprint для обнаружения значения sys.stdin сообщает, что это None (и NoneType.)
В качестве альтернативы, запустите его так:
echo hello | python filter.py
(с явным вызовом python)отлично работает.
Мои файлы .py подключены к выполнению с использованием Python с использованием механизма assoc и ftype (способ, которым Windows связывает определенные расширения имени файла для выполнения с использованием определенных программ):
> assoc .py
.py=Python.File
> ftype Python.File
Python.File="F:\Python32\python.exe" "%1" %*
(это тот самый «python.exe», который стоит у меня на пути)
Обновление : Это не Python.То же самое происходит, если я создаю filter.sh, запускаю с использованием Cygwin Bash.Явно работает 'эхо привет |bash filter.sh 'работает нормально, но' echo hello |filter.sh ', который выполняет filter.sh, используя bash с помощью механизма assoc и ftype, завершается неудачно с' / dev / stdin: такого файла или каталога нет.
Так что мне нужно добавить этот явный 'python'для всех моих командных строк?Плюс, мне любопытно, почему это ломается.Это просто какая-то особенность моей машины, или другие тоже видят это?