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

时间:2019-03-23 20:00:29

标签: python python-3.x subprocess

我发现很多帖子解释了如何使两个python脚本进行通信,大多数情况下是通过使用subprocess包进行的。我需要做同样的事情,但是使用n脚本

为简化我的案例,我有三个Python脚本(master,slave_1,slave_2),应与stdinstdout进行通信。通信应该由第四个脚本(协调器)处理。

我要实现的目标:

enter image description here

# master.py
print('M')
for _ in range(6):
    value = input() + 'M'
print(value)

# slave_1.py
print(input() + '1')

# slave_2.py
print(input() + '2')

按照上图,我希望orchestrator.py在运行时输出'M1M2M1M2M1M2'。

目前,我尝试使用subprocess,但是遇到很多问题,例如卡在stdout.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())

有什么想法吗?

我应该精确地说,我既不能更改主密码又不能更改从密码。

0 个答案:

没有答案