script programa instalar ejecutar desde cómo consola compilar archivos archivo python windows piping

programa - Tubería de Python en Windows: ¿Por qué esto no funciona?



ejecutar.py desde consola python (3)

Cambiarlo a:

Output.py | python Input.py

El resultado será:

Dame el saludo. El saludo es: hola

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 de cmd

Output.py | Input.py

Pero devuelve un EOFError . ¿Puede alguien decirme qué estoy haciendo mal?

Gracias por tu ayuda.

EDITAR
La solución de Patrick Harrington funciona pero no sé por qué ...


Probé esto en mi máquina con Windows y funciona si especifica 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 de por qué es así, todavía estoy investigando esto, pero al menos esto debería darte una solución por ahora. Puede tener algo que ver con la forma en que se invoca el manejador de archivos para los archivos .py.

ACTUALIZACIÓN : bueno, ¿qué sabes tú? 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 hemos señalado Patrick y yo, debe especificar que "python" ejecutará input.py, de lo contrario no redireccionará stdout de output.py a stdin para input.py correctamente.

Referencia :

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

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

ACTUALIZACIÓN 2 :

Para cambiar este comportamiento y hacer que las canalizaciones de Windows funcionen como se esperaba para la redirección stdin / stdout, puede agregar este valor al registro (probado en mi casilla y verificado que funciona como se desee).

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

    HKEY_LOCAL_MACHINE / Software / Microsoft / Windows / CurrentVersion / Policies / Explorer

  3. En el menú Edición, haga clic en Agregar valor y luego agregue el siguiente valor de registro:

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

  4. Salga del Editor del registro.


A continuación, le explicamos por qué obtiene el EOFError (de la documentación en raw_input):

La función luego lee una línea de entrada, la convierte en una cadena (quitando una nueva línea al final) y la devuelve. Cuando se lee EOF, se produce EOFError.

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

Es posible que desee usar sys.stdin , proporciona un objeto de archivo desde el que puede usar los métodos de lectura y lectura.

import sys for greeting_line in sys.stdin.readlines(): print "The greeting is:", greeting_line.strip()