2011-03-20 27 views
17

Quiero ejecutar una aplicación (aplicación de línea de comando) desde C# ... y quiero después de ejecutar esta aplicación y proporcionarle la entrada, quiero analizar el resultado que resultará en ella. Desde entonces, mostrará muchas cosas, y quiero tomar, solo las cosas que lo necesito de él ...Cómo analizar la salida de línea de comando de C#?

¿Cómo puedo hacer eso?

¿Cómo puedo obtener el resultado en el C# y luego tomar solo las cosas que lo necesito?

Para la ejecución de la línea de comandos en C# ... Estoy pensando en usar manera "Jeff MC", que explicó que en este hilo How To: Execute command line in C#, get STD OUT results

Muchas gracias

Respuesta

43

No es una forma más de obtener todos los resultados como y cuando son emitidos por la otra aplicación de consola cmd_DataReceived se genera cada vez que hay salida y cmd_Error se levanta cada vez que se produce un error en la otra aplicación.

Si desea analizar la salida, probablemente el manejo de estos eventos sea una mejor manera de leer la salida y manejar los errores en la otra aplicación cuando ocurra.

using System; 
using System.Diagnostics; 

namespace InteractWithConsoleApp 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      ProcessStartInfo cmdStartInfo = new ProcessStartInfo(); 
      cmdStartInfo.FileName = @"C:\Windows\System32\cmd.exe"; 
      cmdStartInfo.RedirectStandardOutput = true; 
      cmdStartInfo.RedirectStandardError = true; 
      cmdStartInfo.RedirectStandardInput = true; 
      cmdStartInfo.UseShellExecute = false; 
      cmdStartInfo.CreateNoWindow = true; 

      Process cmdProcess = new Process(); 
      cmdProcess.StartInfo = cmdStartInfo; 
      cmdProcess.ErrorDataReceived += cmd_Error; 
      cmdProcess.OutputDataReceived += cmd_DataReceived; 
      cmdProcess.EnableRaisingEvents = true; 
      cmdProcess.Start(); 
      cmdProcess.BeginOutputReadLine(); 
      cmdProcess.BeginErrorReadLine(); 

      cmdProcess.StandardInput.WriteLine("ping www.bing.com");  //Execute ping bing.com 
      cmdProcess.StandardInput.WriteLine("exit");     //Execute exit. 

      cmdProcess.WaitForExit(); 
     } 

     static void cmd_DataReceived(object sender, DataReceivedEventArgs e) 
     { 
      Console.WriteLine("Output from other process"); 
      Console.WriteLine(e.Data); 
     } 

     static void cmd_Error(object sender, DataReceivedEventArgs e) 
     { 
      Console.WriteLine("Error from other process"); 
      Console.WriteLine(e.Data); 
     } 
    } 
} 
+0

¡Bonito, no sabía de esos eventos! :) –

+0

Muchas gracias ........ Realmente hace lo que necesito ...;) – Q8Y

+1

He encontrado que para algunos procesos es mejor ejecutar el comando de esta manera para asegurar que el proceso salga después de la ejecución: 'cmdProcess.StandardInput.WriteLine (" ping www.bing.com && exit ");' – Gobe

Cuestiones relacionadas