2010-06-10 11 views
17

Esto se ejecuta en Windows 7 (64 bit), Python 2.6 con extensiones de Win32 para Python.No se puede redirigir la salida cuando ejecuto el script de Python en Windows utilizando solo el nombre del script

Tengo un script simple que simplemente imprime "hello world". Puedo lanzarlo con python hello.py. En este caso, puedo redirigir la salida a un archivo. Pero si lo ejecuto simplemente escribiendo hello.py en la línea de comando y redirigiendo la salida, obtengo una excepción.

C:> python hello.py 
hello world 

C:> python hello.py >output 

C:> type output 
hello world 

C:> hello.py 
hello world 

C:> hello.py >output 
close failed in file object destructor: 
Error in sys.excepthook: 

Original exception was: 

Creo que primero aparece este error después de actualizar a Windows 7. Recuerdo que debería funcionar en XP. He visto personas hablando de este error python-Bugs-1012692 | Can't pipe input to a python program. Pero eso fue hace mucho tiempo. Y no menciona ninguna solución.

¿Alguien ha experimentado esto? Cualquiera puede ayudar?

+1

¿Sabe usted que hay dos corrientes de salida: stdout y stderr? –

+0

Sí. Y quiero redirigir la salida stdout. –

Respuesta

16

¿Estás preguntando sobre esto?

de Windows: Al ejecutar scripts de Python en la línea de comandos mediante asociaciones de tipo de archivo (es decir, a partir "script.py" en lugar de "script.py pitón"), redirecciones no puede funcionar a menos que establezca un registro específico llave. Consulte el artículo de Knowledge Base STDIN/STDOUT Redirection May Not Work If Started from a File Association.

Está en el README de Python. Tal vez este parche es lo que estás buscando.

+1

Eso es todo. ¡Solo agregar el valor de registro de InheritConsoleHandles lo hace! ¡¡¡Gracias una tonelada!!! –

0

No conozco el problema, pero tengo una idea para evitarlo. ¿Ha pensado en agregar una opción de línea de comandos (como -o) para especificar un archivo de salida que capturará la salida?

+0

Gracias por su sugerencia. Esto servirá como último recurso :) Pero no es tan fácil como simplemente escribir "> salida" a pedido. Además, tengo muchos guiones y no es práctico cambiarlos a todos. –

8

RESPUESTA ACTUALIZADO

Un problema de Microsoft KB (STDIN/STDOUT Redirection May Not Work If Started from a File Association) puede ser exactamente este problema. La página tiene instrucciones para descargar una revisión de Win2000, pero puede que no sea necesaria en versiones de Windows más recientes. Después de la revisión (o posiblemente sin ella, dependiendo de su versión de Win), se necesita una edición de registro manual.

Debe verificar el enlace que proporcioné; en cualquier caso, resumo aquí:

  • Editor del registro abierto y buscar la clave HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
  • agregar un valor DWORD denominado InheritConsoleHandles y la pusieron a 1.

Eso es todo, supuestamente.

+0

Lo tengo en el PATHEXT. Así es como suelo ejecutar el guión. Lamentablemente, recibí el mismo error con o sin ingresar la extensión .py. –

+0

@Wai: verifique la versión "nueva y mejorada" de mi respuesta, y avíseme si esto funciona para usted. – tzot

+0

Vaya. No vi que S.Lott ya había proporcionado el mismo enlace. Lo siento :) – tzot

Cuestiones relacionadas