使用stdin和stdout在两个以上python脚本之间进行通信

使用stdin和stdout在两个以上python脚本之间进行通信,python,python-3.x,subprocess,Python,Python 3.x,Subprocess,我发现有很多帖子解释了如何让两个python脚本通信,大多数情况下都是通过使用子流程包。我需要使用nscripts进行同样的操作 为了简化我的案例,我有三个python脚本(master、slave_1、slave_2),它们应该与stdin和stdout进行通信。通信应该由第四个脚本(编排器)处理 我正在努力实现的目标: 按照上面的图表,我希望我的orchestrator.py在运行时输出'm1m2m1m2' 目前,我尝试使用子流程,但遇到了很多问题,例如被困在标准输出.readline()

我发现有很多帖子解释了如何让两个python脚本通信,大多数情况下都是通过使用
子流程
包。我需要使用
n
scripts进行同样的操作

为了简化我的案例,我有三个python脚本(master、slave_1、slave_2),它们应该与
stdin
stdout
进行通信。通信应该由第四个脚本(编排器)处理

我正在努力实现的目标:

按照上面的图表,我希望我的
orchestrator.py
在运行时输出'm1m2m1m2'

目前,我尝试使用
子流程
,但遇到了很多问题,例如被困在
标准输出.readline()
上。下面是我的
orchestrator.py
的一个非常简单的示例

import subprocess

master = subprocess.Popen(['python', 'master.py'],
                      stdin=subprocess.PIPE,
                      stdout=subprocess.PIPE)

slave_1 = subprocess.Popen(['python', 'slave_1.py'],
                      stdin=subprocess.PIPE,
                      stdout=subprocess.PIPE)

slave_2 = subprocess.Popen(['python', 'slave_2.py'],
                      stdin=subprocess.PIPE,
                      stdout=subprocess.PIPE)

for _ in range(3):
    slave_1.stdin.write(master.stdout.readline())
    master.stdin.write(slave_1.stdout.readline())

    slave_2.stdin.write(master.stdout.readline())
    master.stdin.write(slave_2.stdout.readline())
你想过这个吗


我应该说,我不能改变主人和奴隶的代码。

这可能不是一个好的设计方法,我会重新思考这个问题。是的,我同意,这就是我问题的目的。现在我已经尝试过子流程(现在它不起作用了),关于如何重新思考这个问题的任何建议都是非常受欢迎的。唯一的限制是它必须使用stdin和stdoutit。如果你的问题包括实际的上下文而不是一个简单的例子,那么人们可以提供更可靠的替代方案。但是在“发布前”部分,建议给出一个最小的例子,而不是整个上下文。。。此外,我应该指出,我不能在主服务器和从服务器上更改任何内容,因此我不能重新设计任何内容,我只能更改编排器代码。您也可以通过rabbitmq使用pika使用消息队列来解决此问题。这可能不是构建此问题的好方法,我会重新思考此问题。是的,我同意,这就是我问题的目的。现在我已经尝试过子流程(现在它不起作用了),关于如何重新思考这个问题的任何建议都是非常受欢迎的。唯一的限制是它必须使用stdin和stdoutit。如果你的问题包括实际的上下文而不是一个简单的例子,那么人们可以提供更可靠的替代方案。但是在“发布前”部分,建议给出一个最小的例子,而不是整个上下文。。。此外,我应该指出,我不能在主服务器和从服务器上更改任何内容,因此我不能重新设计任何内容,我只能更改orchestrator代码。您还可以通过rabbitmq使用pika使用消息队列来解决此问题
import subprocess

master = subprocess.Popen(['python', 'master.py'],
                      stdin=subprocess.PIPE,
                      stdout=subprocess.PIPE)

slave_1 = subprocess.Popen(['python', 'slave_1.py'],
                      stdin=subprocess.PIPE,
                      stdout=subprocess.PIPE)

slave_2 = subprocess.Popen(['python', 'slave_2.py'],
                      stdin=subprocess.PIPE,
                      stdout=subprocess.PIPE)

for _ in range(3):
    slave_1.stdin.write(master.stdout.readline())
    master.stdin.write(slave_1.stdout.readline())

    slave_2.stdin.write(master.stdout.readline())
    master.stdin.write(slave_2.stdout.readline())