2009-08-17 22 views
11

Sto tentando di eseguire un processo in C# utilizzando la classe Process.C# reindirizzare (pipe) l'output di processo a un altro processo

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

Quindi in base all'input dell'utente sto costruendo il valore dell'argomento. Ora ho un caso in cui devo pipe l'output di p1 a un altro processo dire grep. quindi ho praticamente provato questo

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

ciò che intendevo è qualcosa di simile xyz.exe -info | grep 1234

ma questo non sembra funzionare in .net .. Posso effettivamente creare un'altra variabile di processo ed eseguire "grep" come un separato processo .. Ma mi stavo chiedendo se c'è un modo per fare come iam provando sopra ..

+0

Ho trovato questo articolo del blog che copre esattamente questa domanda: [Utilizzo del reindirizzamento di output con pipe nelle classi Process/ProcessStartInfo ...] (http://weblogs.asp.net/justin_rogers/archive/2004/02/27/ 81370.aspx) –

+0

Se non si desidera utilizzare CMD, controllare la libreria [MedallionShell] (https://github.com/madelson/MedallionShell). Rende molto più semplice il reindirizzamento del flusso di processo (e altri aspetti della gestione dei processi). – ChaseMedallion

risposta

19

Il modo più semplice sarebbe fare semplicemente usare cmd come processo.

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

È possibile acquisire l'output o qualsiasi altra cosa che si desidera come qualsiasi processo normale quindi. Questo è stato solo un test rapido che ho creato, ma funziona con l'output dei test sulla console, quindi mi aspetto che ciò funzioni per qualsiasi altra cosa si stia facendo con le piping. Se si desidera che il comando rimanga aperto, utilizzare/K anziché/C e la finestra non si chiuderà al termine del processo.

+0

Grazie per aver salvato la mia giornata :) – FatDaemon

+1

Ho bisogno di fare la stessa cosa senza cmd su linux. Come posso collegare lo StreamReader del processo sorgente con StreamWriter del processo di destinazione? –

+1

e come farlo in Linux? :) – knocte

Problemi correlati