如何写入另一个应用程序的标准输入?
Posted
技术标签:
【中文标题】如何写入另一个应用程序的标准输入?【英文标题】:How to write to the stdin of another app? 【发布时间】:2010-04-10 11:16:32 【问题描述】:我有一个模块可以读取进程的 StandardError。一切正常,但我想做一些不同的事情。我不知道如何像原生方式一样重定向标准输入:
app1.exe -someargs | app2.exe -someargs
app2 在其标准输入中读取 app1 的所有标准输出。
【问题讨论】:
这个答案应该会给你一个好主意C# Console receive input with pipe 但是第二个申请不是我写的。我需要向子进程发送字节,而不是接收它们。 @blez,应该很明显。写作与阅读相反。链接的答案告诉您从控制台读取,您写入控制台。 【参考方案1】:一旦您拥有了代表您要与之通信的进程的Process
对象(因为您使用静态方法Process.GetProcesses
从操作系统获得它,或者因为您自己创建了它),您可以附加@987654323 @ 到 Process.StandardInput
属性并使用它来写入进程的标准输入。不要忘记将新创建的进程上的ProcessStartInfo.RedirectStandardInput
设置为true
。
在相关说明中,您可以在Process.StandardOutput
上使用StreamReader
来读取输出(例如从StandardError
读取)。
【讨论】:
【参考方案2】:查看以下 MSDN 参考文档(都可以在 System.Diagnostics
命名空间中找到):
Process.StandardInput
ProcessStartInfo.RedirectStandardInput
。 有一个示例展示了如何启动子进程并直接写入其标准输入。
对于您的特定示例,以下是您的设置方式:
app1 使用 Process
类将 app2 作为子进程启动(参见上面的链接)。
app1 通过写入与 app2 关联的 Process
对象的 .StandardInput
流写入 app2 的标准输入em>.
app2 只是从其标准输入中读取行(例如通过Console.ReadLine()
)。
【讨论】:
【参考方案3】:我不得不使用 BinaryWriter,这篇文章解释了一切: BinaryWriter and StdIn
【讨论】:
以上是关于如何写入另一个应用程序的标准输入?的主要内容,如果未能解决你的问题,请参考以下文章