如何在Python中从不同的本地/远程进程将数据流式传输到程序的STDIN?

3 投票
2 回答
2041 浏览
提问于 2025-04-16 04:34

标准流是和一个程序关联在一起的。假设现在有一个程序正在运行,不管它是怎么运行的。我们的目标是从不同的进程(或者程序)创建管道,把数据异步地传送到这个程序的标准输入(STDIN)中,这些进程可以是在本地运行的,也可以是在远程运行的。

我们手头有的信息是(1)主机地址和(2)程序的进程ID(pid)。那么在这种情况下,如何用Python实现这两种情况呢?

补充说明:我应该提到这一前提条件。我们要操作的操作系统是Linux,且内核版本相对较新

2 个回答

1

在大多数平台(也就是操作系统)上,已经存在的进程的文件描述符是不能被随意改变的——操作系统为了保证进程的完整性,设计时就考虑到不允许其他无关的进程去修改这些文件描述符。

不过,如果你指定一个非常具体且明确的平台(最好还包括操作系统的确切版本和发布号,因为安全性在后续版本中通常会比之前的版本更严格),那么很有可能会有一些技巧可以满足你的需求。例如,你可能可以利用操作系统为“远程调试器”连接到现有进程而预留的一些接口——前提是你的特定操作系统确实提供了这样的接口(并不是所有操作系统都有!)。

但是,如果你想要一个跨平台的解决方案,那就没戏了。

所以,我建议你修改一下你的问题,特别是把标签中的一个换成你真正需要支持的“唯一”操作系统的名称(在你编辑后的文本中,请尽量具体说明你绝对需要支持的确切版本和发布号——Python与这个问题关系不大,因为你需要在特定操作系统的层面上进行操作,所以没有必要特别指出Python的版本)。

2

这不是一个通用的方法,但在很多Linux系统上,你可以写入

/proc/$PID/fd/0

我觉得如果你对远程进程没有其他控制,这可能是一个非常有限且复杂的选择之一。

撰写回答