使用python连接进程stdin / stdout

时间:2018-04-30 09:30:53

标签: python subprocess

我有一个bash脚本(使用mkfifo创建了fifo1和fifo2):

processor <fifo1 >fifo2 &
source >fifo1 &
sink <fifo2 &

实现图表:

source -> processor -> sink

我如何在python脚本中执行此操作?

1 个答案:

答案 0 :(得分:-1)

要使用系统流程,您可以使用SubprocessPopen

然后,要在进程之间共享数据,您可以使用PIPE

还提供了示例代码here

这是一个简单的实现:

p1.py

import subprocess

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

stdout_value, stderr_value = proc.communicate()

print('\nStdout value' + repr(stdout_value) + '\n')
print('\nStderr value' + repr(stderr_value) + '\n')

此代码将调用 temp2.​​py 程序 temp2.​​py

import subprocess

proc = subprocess.Popen(['ls'], stdin=subprocess.PIPE ,stdout=subprocess.PIPE
                        , stderr=subprocess.PIPE)

stdin_value, stdout_value = proc.communicate()
print('\nStdin value' + repr(stdin_value) + '\n')
print('\nStdout value' + repr(stdout_value) + '\n')

temp2.​​py 将在当前目录中执行ls命令,然后保存结果。

要获得有关如何使用管道中存储值的更多详细信息,请检查this使用系统输入输出有很多变化,这取决于您的实现,因此请查看上述文档以获取进一步的帮助。