【发布时间】:2019-01-06 09:35:36
【问题描述】:
我在 Python 中工作,我想找到一个工作流来使两个进程(main-process 和 sub-process)能够相互通信。我的意思是 main-process 向 sub-process 发送一些数据的能力(也许,通过写入 sub-process's stdin ) 以及 子进程 将一些数据发送回主进程的能力。这也意味着两者都可以读取发送给他们的数据(我正在考虑从标准输入读取)。
我试图使用 subprocess 库,但它似乎旨在与旨在仅提供一次输出然后终止的进程一起使用,而我想 交换数据动态,只有在收到这样的命令时才关闭子进程。
我在这里阅读了很多关于 StackOverflow 解决与我密切相关的问题的答案,但没有一个让我感到满意,因为这些答案本应与我的问题在一个重要细节上有所不同:我需要我的 主进程能够交换数据与其子进程根据需要动态多次,而不仅仅是一次,这反过来意味着 子进程 应该运行,直到它从 主进程 接收到某个命令以终止。
我对使用第三方库持开放态度,但如果您提出仅基于 Python 标准库的解决方案会更好。
【问题讨论】:
-
@Omer 不,不是。首先,您所指的问题中的任务更具体,因为子流程的标准流不能被使用,因为它们是为其他东西保留的。其次,我要求动态交换数据,而据我所知,那里提出的实现产生的结果与我正在寻找的结果相反。
-
自从我使用管道以来已经有一段时间了,但是 iirc 它们允许您在进程之间动态交换数据,这是一个非 Python 的解释:tldp.org/LDP/lpg/node7.html 很确定链接的线程谈到了类似的事情,请尝试重新-检查它(虽然我可能错了)
-
听起来您仍然在为两个 Python 进程寻找好的旧 IPC...。其中:a)有点使问题不是真正的Python特定的; b) 在选择最合适的 IPC 机制方面缺少一些位(在查看如何在 Python 中使用它之前);我们知道这些流程预计会在更长的时间内交换数据。这种通信是双向的吗?子流程是否只希望与“主”流程一样长,或者它实际上可以衍生出自己的生命?传递信息的性质?...
-
@OndrejK。抱歉,如果我的问题中的某些内容对您来说似乎含糊不清,尽管我认为我尽可能清楚地说明了这一点:我需要主进程能够生成子进程并向其发送数据(它可以是纯文本)同时还能够从中接收消息(也可以是文本);子进程应该运行直到主进程说它终止(或者,也许,直到主进程杀死它)。感谢您与我们联系。
标签: python python-3.x subprocess