如何写入另一个应用程序的标准输入?

我有一个模块读取进程的StandardError。 一切都很好,但我想做一些不同的事情。 我不知道如何像本机方式重定向stdin:

app1.exe -someargs | app2.exe -someargs

app2在其标准输入中读取app1的所有标准输出。

查看以下MSDN参考文档(两者都可以在System.Diagnostics命名空间中找到):

  • Process.StandardInput

  • ProcessStartInfo.RedirectStandardInput
    有一个示例显示如何启动子进程并直接写入其标准输入。

对于您的具体示例,以下是您设置的方式:

  1. app1使用Process类将app2作为子进程启动(参见上面的链接)。

  2. app1通过写入与app2关联的Process对象的.StandardInput流来写入app2的标准输入。

  3. app2只是从其标准输入中读取行(例如通过Console.ReadLine() )。

一旦你有Process对象代表你要与之通信的进程(因为你是使用静态方法Process.GetProcesses从操作系统获得它,或者是因为你自己创建了它),你可以将StreamWriter附加到Process.StandardInput属性并使用它来写入进程的标准输入。 不要忘记将新创建的进程上的ProcessStartInfo.RedirectStandardInput设置为true

在相关说明中,您可以使用Process.StandardOutput上的StreamReader来读取输出(例如从StandardError读取)。

我不得不使用BinaryWriter,这篇文章解释了所有: BinaryWriter和StdIn