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

问题描述:

我有一个读取进程的StandardError的模块。一切正常,但我想做一些不同的事情。我不知道如何重定向标准输入,如土办法:如何写入另一个应用程序的标准输入?

app1.exe -someargs | app2.exe -someargs

凡APP2 APP1读取所有标准输出在其标准输入。

+0

这个答案应该给你一个不错的主意[C#控制台接收与管道输入(http://*.com/questions/ 199528/c-console-receive-input-with-pipe) – 2010-04-10 11:19:36

+0

但是第二个应用程序不是由我写的。我需要发送字节到子进程,而不是接收它们。 – blez 2010-04-10 11:23:16

+0

@blez,它应该是非常明显的。写作与阅读相反。如果链接的答案告诉您从控制台读取,则可以写入控制台。 – 2010-04-10 11:34:36

看一看,有如下MSDN的参考文档(包括在System.Diagnostics命名空间中找到):

为了您的具体的例子,这里是你如何设置的东西了:

  1. APP1开始APP 2为使用Process类(见上面的链接)一个子进程。

  2. APP1通过写入与APP2相关联的Process对象的.StandardInput流写入到APP2的标准输入。

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

一旦你有一个代表你想(使用,因为您从OS得到了它的静态方法Process.GetProcesses,还是因为你自己创建它),你可以将一个StreamWriterProcess.StandardInput财产进行沟通的过程中Process对象并用它写入进程的标准输入。不要忘记在新创建的进程上将ProcessStartInfo.RedirectStandardInput设置为true

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

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