Lorenz respuesta es un buen comienzo, pero por desgracia sólo se puede utilizar una fuente de inspiración. Hay más modos para ejecutar una aplicación de consola.
plazo estándar (en la consola, sin ningún cambio de dirección)
trabajo Todo según lo esperado en la consola.
Ejecución con redirección de consola con la entrada estándar y/o redirección de la salida estándar
por ejemplo
type input_file.txt | application.exe
(en de Windows), o application.exe <input_file.txt
para la redirección de entrada
(sustituir con type
cat
en Linux)
o
application.exe | grep pattern
o application.exe >output_file.txt
para redirección de la salida
o
type input_file.txt | application.exe | grep pattern
o application.exe <input_file.txt >output_file.txt
para la entrada y redirección de la salida
Ejecución con redirección de consola con la salida estándar y redirección de la salida de error
por ejemplo application.exe >output_file.txt 2>error_file.txt
Ejecutora con la consola oculta y de entrada/salida/error redirigido
por ejemplo desde una aplicación GUI (consola no es visible en absoluto)
Ejecución con la consola oculta sin redirección de entrada/salida/error
Cada uno de éstos modo tiene su propio 'características' . El Console.WindowHeight
y Console.WindowWidth
funcionan en Windows para el 1er y 2do modo de la manera estándar. En Linux el valor de retorno en el segundo y tercer modo es cero. Por lo tanto, en Linux no puede detectar la redirección solo de entrada.
Por lo tanto, el código de la respuesta de Lorenz no se puede utilizar para la detección de redirección en todos los casos. El IOException
al leer Console.WindowHeight
o Console.WindowWidth
se lanza solamente cuando no hay salida a la consola (modo de ejemplo 3º) y sólo para de Windows.
Para detectar entrada redirección (en de Windows solamente) uso de esta función:
private static bool IsInputRedirected()
{
try
{
if (Console.KeyAvailable)
{
return (false);
}
}
catch (InvalidOperationException)
{
return (true);
}
return (false);
}
Para todos los demás sistemas operativos de redirección y ... Trate de experimentar cómo detectarlos. Diferentes funciones de consola y funciones 'trabajo' (arrojar excepción, o cero valores de retorno) para diferentes modos.
Probado en Windows 7 .NET Framework 4 Client Profile
y Mono JIT compiler version 4.2.1 (Debian 4.2.1.102+dfsg2-7ubuntu4)
.
IMPORTANTE:
No utilice esta función para la entrada de la reorientación en Linux (detectar con OS/plataforma, por ejemplo, Mono para Windows), ya que puede causar más problemas cuando falsamente espera redirección y la la redirección no está activa.
El código anterior se estableció para .NET 4.5 que ahora incluye las propiedades IsErrorRedirected, IsInputRedirected y IsOutputRedirected. –
implementación interesante, lamentablemente no es aplicable para el desarrollo multiplataforma. –
La función isatty() tiende a estar disponible en otras plataformas para una prueba similar. –