【问题标题】:c# redirect (pipe) process output to another processc# 重定向(管道)进程输出到另一个进程
【发布时间】:2010-11-20 10:00:18
【问题描述】:

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

【问题讨论】:

标签: c# .net process pipe


【解决方案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();

【讨论】:

    【解决方案2】:

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

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

    您可以像任何正常过程一样捕获输出或任何其他您想要的内容。这只是我构建的一个快速测试,但它可以将测试输出到控制台,所以我希望这适用于您计划对管道进行的任何其他操作。如果您希望命令保持打开状态,请使用 /K 而不是 /C,一旦进程完成,窗口将不会关闭。

    【讨论】:

    • 我需要在没有 cmd 的情况下在 linux 上做同样的事情。如何连接源进程的StreamReader和目标进程的StreamWriter?
    • 以及如何在 Linux 中做到这一点? :)
    • 如何在 Linux 上做同样的事情 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-08
    • 2013-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多