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

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

最佳答案

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

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

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

关于c#重定向(管道)进程输出到另一个进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1290747/

相关文章:

c# - 使用 XamDataGrid 并尝试从 RecordActivated() 函数的发送者对象中获取特殊值

带接口(interface)的 C# 泛型

c# - 反序列化 GUID 数组时出现 JSON.NET 异常

c# - 我可以有可变数量的通用参数吗?

c - 如何在 c 中解决这个 fork() 示例

c - 从父进程获取子进程的退出状态并将其打印在父进程中。

创建我自己的进程名称并在 Top Linux 中显示

c# - 为 Web 服务创建磁盘缓存的最佳方法

c# - 一个对象能够将自己保存到数据库中是否会破坏类的凝聚力?

c# - 使用网络响应加载网络浏览器