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

时间:2009-08-17 22:05:53

标签: c# .net process pipe

我正在尝试使用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”作为一个单独的进程..但我想知道是否有任何方法可以做,因为我尝试上面..

2 个答案:

答案 0 :(得分:20)

更简单的方法是使用cmd作为您的流程。

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

您可以捕获输出或其他任何您想要的任何正常过程。这只是我构建的一个快速测试,但它可以输出测试到控制台,所以我希望这对你计划用管道做的任何其他事情都有效。如果您希望命令保持打开状态,则使用/ K而不是/ C,并且一旦该过程完成,窗口将不会关闭。

答案 1 :(得分:1)

您可以使用CliWrap来简化管道,而无需控制台,也可以完全使用x平台:

var output = File.Create("output.txt"); // stream is just one of the options

var cmd = Cli.Wrap("xyz.exe") | output;
await cmd.ExecuteAsync();