2011-07-10 6 views
5

Estoy en Windows XP. Esto parece afectar cualquier proceso, pero usaré Python3.2 para demostrarlo. Una secuencia de comandos, 'filter.py':entrada estándar no se encuentra para cualquier tubería de proceso I en la que utiliza Windows y ftype mecanismo Assoc para seleccionar el ejecutable correcto

import sys 
for line in sys.stdin: 
    print(line) 

Ejecución de esta manera:

echo hello | filter.py 

saltos como este:

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 

Efectivamente, la adición de una impresión a descubrir el valor de sys.stdin informa que es Ninguno (y de NoneType.)

O bien, ejecute esto de la siguiente manera:

echo hello | python filter.py 

(con una invocación explícita de python) funciona perfectamente bien.

Mis archivos .py están conectados a ejecutar utilizando Python usando la asoc y el mecanismo ftype (la forma en que Windows asocia extensiones de archivos particulares para ser ejecutados mediante programas particulares):

> assoc .py 
.py=Python.File 
> ftype Python.File 
Python.File="F:\Python32\python.exe" "%1" %* 

(esto es lo mismo ' python.exe 'que es lo más importante en mi camino)

Actualización: Esto no es una cosa de Python. Lo mismo sucede si creo filter.sh, corro usando cygwin bash. Explícitamente ejecutando 'echo hello | bash filter.sh 'funciona bien, pero' echo hola | filter.sh 'que ejecuta filter.sh usando bash a través de los mecanismos assoc y ftype, falla con'/dev/stdin: No hay tal archivo o directorio '.

Así que tengo que añadir este 'pitón' explícita a todos mis líneas de comando? Además, tengo curiosidad sobre por qué se está rompiendo. ¿Es solo alguna peculiaridad de mi máquina, o lo ven otras personas también?

Respuesta

1

Lo echo está usando? ¿Tiene una utilidad de estilo UNIX echo en su ruta de acceso o solo está utilizando la de Microsoft (que no hace lo que quiere)? ¿Qué sucede si escribe echo on en el símbolo del sistema?

estoy corriendo en Windows 7 y era incapaz de reproducir esto. Tengo una utilidad echo estilo UNIX en mi ruta. Tengo installed ruby 1.9.2 y pequeño programa escrito en test.rb:

while s = $stdin.gets 
    print s 
end 

El programa se ejecuta al escribir cualquiera de estos comandos:

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

Los Comandos 1 y 2 se comportan de manera idéntica. Los Comandos 3 y 4 se comportan de manera idéntica. Todo se comporta como yo esperaba.

EDIT 1: Aquí están algunos comandos me encontré:

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 

no sé mucho acerca de ftype, pero tal vez debería instalar el rubí en el sistema y ver si mi programa de ejemplo que funciona para tú.

+0

Hey. Gracias por la respuesta. Tengo todos los binarios cygwin más importantes en mi PATH, incluido echo. Tal vez es algo de Windows XP. Es curioso que no lo haya notado antes. Lo intentaré en otros sabores de Windows e informaré. –

+0

¡Oh! Y, ¿puedo pedirle que muestre su configuración de ftype y aso que asocia archivos .rb con ruby? Tal vez configuré el mío de una manera loca. es decir, cuál es el resultado de "assoc .rb" y "ftype X", donde X es el resultado del comando assoc. ¡Gracias! –

+0

Actualicé por respuesta para incluir esa información. Hice mis experimentos en el Microsoft Command Prompt normal. ¿Qué shell estás usando? –

Cuestiones relacionadas