2011-11-03 12 views
7

He intentado ejecutar el siguiente comando en el símbolo del sistema de Windows.incapaz de redirigir el mensaje de salida en el símbolo del sistema de Windows (cmd.exe)

abc.exe >log.txt 2>&1 

Estoy esperando toda la salida de abc.exe que será dirigida a log.txt, pero no funciona, como el log.txt está vacía.

Sin embargo, si acabo de ejecutar abc.exe, la salida se muestra en el símbolo del sistema de Windows.

No estoy seguro de cuál es el controlador de salida utilizado por esta aplicación (STDOUT o STDERR), pero me pregunto si hay alguna forma de capturar todos los mensajes independientemente del controlador.

+0

'perl abc.exe> ​​log.txt 2> & 1' prueba esto – run

+0

Cuando dices" no funciona ", ¿qué quieres decir? El programa no funciona en absoluto? Se ejecuta, pero no hay salida? Se ejecuta, pero la salida va a la consola? –

+0

Hola Johnston, genera el archivo, pero está vacío. la salida no va a la consola – TimMe

Respuesta

-1

veo el problema ... su primera salida estándar escribe en el archivo, entonces su salida de error sobrescribe que - por lo que si usted no tiene ningún error, se obtiene un archivo en blanco!

su lugar, tratar anexar la salida de error en el mismo archivo, así:

abc.exe >log.txt 2>>&1 

+0

-1, eso no es lo que> hace. La sintaxis original de OP es correcta y hace exactamente lo mismo que la tuya. –

+0

Sí, buen punto ... Acabo de buscar el [referencia] (http://ss64.com/nt/syntax-redirection.html). ¡Debo haber respondido demasiado rápido! – ewall

0

Si realmente necesita para capturar ese mensaje, utilice la API de consola.

CreateConsoleScreenBuffer y SetConsoleActiveScreenBuffer le permiten cambiar a un búfer de pantalla dedicado para evitar interferir con el existente.

SetConsoleScreenBufferSize puede hacer que el búfer sea lo suficientemente ancho como para evitar el vuelco de la línea.

SetConsoleCursorPosition puede establecer la posición del cursor según sea necesario.

Después de ejecutar el programa, ReadConsoleOutput le permite leer lo que escribió en la consola.

Puede utilizar GetStdHandle (STD_OUTPUT_HANDLE) y SetConsoleActiveScreenBuffer para devolver la consola al búfer original y CloseHandle para cerrar el búfer adicional.

+0

Gracias por la discusión chicos.Resulta que Jonston tiene razón, el vendedor admitió que es un error en este programa, lo que hace que el mensaje no pueda redirigirse correctamente. sin embargo, me parece extraño que el error se pueda imprimir en la consola de Windows, pero no hay forma de que lo capturemos mediante programación. – TimMe

0

El síntoma de que la salida de la consola no está visible cuando se redirige a un archivo puede deberse a que falta flush() en el programa que escribe en la salida estándar. Sin embargo, la salida debe ser visible cuando el programa sale (con elegancia) o cuando el buffer respectivo se llena y se enjuaga automáticamente.

Cuestiones relacionadas