2009-08-17 16 views
11

Estoy intentando ejecutar un proceso en C# utilizando la clase Process.C# redirigir (canalizar) la salida del proceso a otro proceso

Process p1 = new process(); 
p1.startinfo.filename = "xyz.exe"; 
p1.startinfo.arguments = //i am building it based on user's input. 
p1.start(); 

De acuerdo con la entrada del usuario estoy construyendo el valor del argumento. Ahora tengo un caso en el que tengo que conectar la salida de p1 a otro proceso digamos grep. así que básicamente intenté esto

p1.startinfo.arguments = "-info | grep 1234";

lo que quería decir algo así como xyz.exe -info | grep 1234

pero esto no parece funcionar en .net .. De hecho, me puedo crear otra variable de proceso y ejecutar "grep" como un separado proceso ... Pero me preguntaba si hay alguna manera de hacerlo como lo estoy haciendo antes.

+0

Encontré este artículo del blog que cubre exactamente esta pregunta: [Utilizando la redirección de salida por canal en las clases Process/ProcessStartInfo ...] (http://weblogs.asp.net/justin_rogers/archive/2004/02/27/ 81370.aspx) –

+0

Si no desea usar CMD, consulte la biblioteca [MedallionShell] (https://github.com/madelson/MedallionShell). Hace que la redirección de flujo de procesos (y otros aspectos de la gestión de procesos) sea mucho más simple. – ChaseMedallion

Respuesta

19

La forma mucho más fácil sería simplemente usar cmd como proceso.

Process test = new Process(); 
test.StartInfo.FileName = "cmd"; 
test.StartInfo.Arguments = @"/C ""echo testing | grep test"""; 
test.Start(); 

Puede capturar la salida o lo que desee como cualquier proceso normal. Esta fue solo una prueba rápida que construí, pero funciona enviando pruebas a la consola, así que supongo que esto funcionaría para cualquier otra cosa que planee hacer con la tubería. Si desea que el comando permanezca abierto, utilice/K en lugar de/C y la ventana no se cerrará una vez que el proceso finalice.

+0

Gracias me salvaste el día :) – FatDaemon

+1

Necesito hacer lo mismo sin cmd en Linux. ¿Cómo puedo conectar el StreamReader del proceso fuente con StreamWriter del proceso objetivo? –

+1

y cómo hacer eso en Linux? :) – knocte

Cuestiones relacionadas