отсутствует стандартный ввод для любого процесса, в который я направляю канал, в котором для выбора правильного исполняемого файла используется механизм Windows Ftype и Assoc. - PullRequest
5 голосов
/ 10 июля 2011

Я на 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'для всех моих командных строк?Плюс, мне любопытно, почему это ломается.Это просто какая-то особенность моей машины, или другие тоже видят это?

1 Ответ

1 голос
/ 10 июля 2011

Что echo вы используете? У вас есть утилита в стиле UNIX echo на вашем пути или вы просто используете Microsoft (которая не делает то, что вы хотите)? Что произойдет, если вы введете echo on в командной строке?

Я работаю в Windows 7 и не смог воспроизвести это. У меня есть UNIX-стиль echo на моем пути. У меня установлен ruby ​​1.9.2 и написана крошечная программа на test.rb:

while s = $stdin.gets
  print s
end

Программа запускается, когда я набираю любую из следующих команд:

  1. test.rb
  2. ruby test.rb
  3. echo hello | test.rb
  4. echo hello | ruby test.rb

Команды 1 и 2 ведут себя одинаково. Команды 3 и 4 ведут себя одинаково. Все ведет себя так, как я ожидал.

РЕДАКТИРОВАТЬ 1: Вот несколько команд, которые я выполнил:

C:\Users\David\Documents\scraps\test_ruby>ls
test.rb

C:\Users\David\Documents\scraps\test_ruby>assoc .rb
File association not found for extension .rb

C:\Users\David\Documents\scraps\test_ruby>echo hi | test.rb
hi

Я не знаю много о ftype, но, возможно, вам стоит установить ruby ​​в вашей системе и посмотреть, работает ли мой пример программы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...