【问题标题】:Using python to connect processes stdin/stdout使用python连接进程stdin/stdout
【发布时间】:2018-04-30 09:30:53
【问题描述】:

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

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

实现图:

source -> processor -> sink

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

【问题讨论】:

  • 你的脚本有什么特别之处需要命名管道,而不是source | processor | sink
  • @chepner 这是一个异步系统,其中源可以随时产生数据(长度不确定)。并且系统应该运行直到“被杀死”。我很震惊,因为source | processor | sink 结构并不完全适合这一点,但我可能错了。我会调查的。

标签: python subprocess


【解决方案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,使用系统输入输出有很多变化,这取决于您的实现,因此请查看上述文档以获得更多帮助。

【讨论】:

    猜你喜欢
    • 2012-05-20
    • 1970-01-01
    • 2021-06-02
    • 1970-01-01
    • 2017-04-16
    • 2014-02-14
    • 2011-06-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多