我有一个读取进程StandardError的模块。一切都很好,但我想做一些不同的事情。我不知道如何像本机方式重定向stdin:
app1.exe -someargs | app2.exe -someargs
app2在其标准输入中读取app1的所有标准输出。
答案 0 :(得分:8)
一旦你有Process
对象代表你要与之通信的进程(因为你是使用静态方法Process.GetProcesses
从操作系统获得它,或者是因为你自己创建了它),你可以将StreamWriter
附加到Process.StandardInput
属性并使用该属性写入进程的标准输入。不要忘记将新创建的流程上的ProcessStartInfo.RedirectStandardInput
设置为true
。
在相关说明中,您可以使用StreamReader
上的Process.StandardOutput
来阅读输出(例如从StandardError
读取)。
答案 1 :(得分:3)
查看以下MSDN参考文档(两者都可以在System.Diagnostics
命名空间中找到):
ProcessStartInfo.RedirectStandardInput
。
有一个示例显示如何启动子进程并直接写入其标准输入。
就您的具体示例而言,以下是您的设置方式:
app1 使用Process
类作为子进程启动 app2 (请参阅上面的链接)。
app1 通过写入与.StandardInput对象的Process
流来写入 app2 的标准输入> APP2
app2 只是从标准输入中读取行(例如,通过Console.ReadLine()
)。
答案 2 :(得分:0)
我不得不使用BinaryWriter,这篇文章解释了所有: BinaryWriter and StdIn