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