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

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

【讨论】:

以上是关于如何写入另一个应用程序的标准输入?的主要内容,如果未能解决你的问题,请参考以下文章

如何写入 Python 子进程的标准输入?

如何在 paramiko 中写入标准输入(从 exec_command 返回)?

Python:如何写入子进程的标准输入并实时读取其输出

在 Rust 中写入子进程的标准输入?

如何在 Python 中执行将数据写入标准输入的进程?

Erlang 读标准输入 写标准输出