2009-08-17 10 views
11

J'essaie d'exécuter un processus dans C# en utilisant la classe Process.C# redirige la sortie du processus (pipe) vers un autre processus

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

Donc, en fonction de l'entrée de l'utilisateur, je construis la valeur de l'argument. Maintenant, j'ai un cas où je dois canaliser la sortie de p1 à un autre processus, disons grep. donc j'ai essentiellement essayé cela

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

ce que je voulais est quelque chose comme xyz.exe -info | grep 1234

mais cela ne semble pas fonctionner en .net .. Je peux réellement créer une autre variable de processus et exécuter « grep » comme séparé processus .. Mais je me demandais s'il n'y a aucun moyen de faire comme iam essayer ci-dessus ..

+0

J'ai trouvé cet article de blog qui couvre exactement cette question: [Utiliser la redirection de sortie canalisée sur les classes Process/ProcessStartInfo ...] (http://weblogs.asp.net/justin_rogers/archive/2004/02/27/ 81370.aspx) –

+0

Si vous ne souhaitez pas utiliser CMD, consultez la bibliothèque [MedallionShell] (https://github.com/madelson/MedallionShell). Il rend la redirection de flux de processus (et d'autres aspects de la gestion de processus) beaucoup plus simple. – ChaseMedallion

Répondre

19

Le moyen beaucoup plus facile serait de simplement utiliser cmd comme processus.

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

Vous pouvez capturer la sortie ou tout ce que vous voulez comme tout processus normal alors. Ce fut juste un test rapide que j'ai construit, mais cela fonctionne en produisant des tests sur la console, donc je m'attendrais à ce que cela fonctionne pour tout ce que vous envisagez de faire avec la tuyauterie. Si vous voulez que la commande reste ouverte, utilisez/K au lieu de/C et la fenêtre ne se fermera pas une fois le processus terminé.

+0

Merci vous avez sauvé ma journée :) – FatDaemon

+1

Je dois faire la même chose sans cmd sur Linux. Comment puis-je connecter StreamReader du processus source avec StreamWriter du processus cible? –

+1

et comment faire cela sous Linux? :) – knocte

Questions connexes