c#重定向(管道)进程输出到另一个进程

问题描述:

我想在c#中使用Process类运行进程。c#重定向(管道)进程输出到另一个进程

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

所以根据用户输入我建立参数值。现在我有一个情况,我必须将p1的输出传递给另一个进程,说grep。所以我基本上试过这个

p1.startinfo.arguments =“-info | grep 1234”;

是我的本意是像xyz.exe -info | grep的1234

,但这似乎并没有在.NET中工作..其实我可以创建另一个过程变量和运行的“grep”作为一个独立的过程..但我想知道是否有任何方式可以做,因为我试试以上..

+0

我发现这篇博客文章涵盖了这个问题:[在Process/ProcessStartInfo类中使用管道输出重定向...](http://weblogs.asp.net/justin_rogers/archive/2004/02/27/ 81370.aspx) – 2009-08-17 22:10:29

+0

如果您不想使用CMD,请查看[MedallionShell](https://github.com/madelson/MedallionShell)库。它使流程重定向(以及流程管理的其他方面)变得更加简单。 – ChaseMedallion 2014-08-24 18:12:09

更简单的方法是做只是使用cmd作为您的过程。

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

然后,您可以捕获输出或任何其他任何你想要的东西。这只是我建立的一个快速测试,但它可以将测试输出到控制台,所以我期望这将适用于您计划用管道进行的其他任何事情。如果您希望命令保持打开状态,则使用/ K而不是/ C,并且该过程完成后该窗口不会关闭。

+0

谢谢你救了我的一天:) – FatDaemon 2009-08-18 17:37:49

+1

我需要在linux上不使用cmd来做同样的事情。如何将源进程的StreamReader与目标进程的StreamWriter连接起来? – 2015-05-25 12:13:21

+1

以及如何在Linux中做到这一点? :) – knocte 2016-06-07 09:31:25