Pregunta

Estoy intentando algo como esto

Output.py

print "Hello"

Input.py

greeting = raw_input("Give me the greeting. ")
print "The greeting is:", greeting

En la línea cmd

Output.py | Input.py

Pero devuelve un EOFError . ¿Alguien puede decirme qué estoy haciendo mal?

Gracias por su ayuda.

EDITAR
Patrick Harrington solución funciona pero no lo hago ' No sé por qué ...

¿Fue útil?

Solución

Probé esto en mi máquina con Windows y funciona si especificas el Python exe:

C:\>C:\Python25\python.exe output.py | C:\Python25\python.exe input.py
Give me the greeting. The greeting is: hello

Pero también obtengo un EOFError si ejecuto los comandos directamente como:

output.py | input.py 

No estoy seguro exactamente por qué es eso, todavía estoy investigando esto, pero al menos esto debería proporcionarle una solución por el momento. Puede tener algo que ver con la forma en que se invoca el controlador de archivos para archivos .py.

ACTUALIZACIÓN : bueno, ¿qué sabes? Parece que esto es realmente un error en Windows donde la redirección stdin / stdout puede no funcionar correctamente cuando se inicia desde una asociación de archivos. Entonces, la solución es la que yo y Patrick hemos señalado, debe especificar & Quot; python & Quot; ejecutará input.py, de lo contrario no redirigirá stdout desde output.py al stdin para input.py correctamente.

Referencia :

http: //mail.python .org / pipermail / python-bugs-list / 2004-agosto / 024923.html

http://support.microsoft.com/default.aspx?kbid = 321788

ACTUALIZACIÓN 2 :

Para cambiar este comportamiento y hacer que las tuberías de Windows funcionen como se espera para la redirección stdin / stdout, puede agregar este valor al registro (probado en mi caja y verificado que funciona como se desea).

  
      
  1. Inicie el Editor del Registro.
  2.   
  3. Localice y luego haga clic en la siguiente clave del registro:

         

    HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer

  4.   
  5. En el menú Editar, haga clic en Agregar valor y luego agregue lo siguiente   valor de registro:

         

    Nombre del valor: InheritConsoleHandles
        Tipo de datos: REG_DWORD
        Radix: Decimal
        Datos del valor: 1

  6.   
  7. Salga del Editor del Registro.

  8.   

Otros consejos

Cámbielo a:

Output.py | python Input.py

El resultado será:

  

Dame el saludo. El saludo es: hola

He aquí por qué obtienes el EOFError (de la documentación en raw_input):

  

La función lee una línea de   entrada, lo convierte en una cadena   (pelar una nueva línea final), y   devuelve eso. Cuando se lee EOF,   EOFError se eleva.

http://docs.python.org/library/functions .html? highlight = raw_input # raw_input

Es posible que desee utilizar sys.stdin , proporciona un objeto de archivo desde el que puede utilizar los métodos readline, readlines.

import sys
for greeting_line in sys.stdin.readlines():
    print "The greeting is:", greeting_line.strip()
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top