gpt4 book ai didi

python - 将多个 Popen 命令与管道链接起来

转载 作者:太空宇宙 更新时间:2023-11-04 12:44:46 24 4
gpt4 key购买 nike

我知道如何使用 cmd = subprocess.Popen 运行命令,然后使用 subprocess.communicate。大多数时候,我使用 shlex.split 标记化的字符串作为 Popen 的“argv”参数。使用“ls -l”的示例:

import subprocess
import shlex
print subprocess.Popen(shlex.split(r'ls -l'), stdin = subprocess.PIPE, stdout = subprocess.PIPE, stderr = subprocess.PIPE).communicate()[0]

但是,管道似乎不起作用...例如,以下示例返回注释:

import subprocess
import shlex
print subprocess.Popen(shlex.split(r'ls -l | sed "s/a/b/g"'), stdin = subprocess.PIPE, stdout = subprocess.PIPE, stderr = subprocess.PIPE).communicate()[0]

你能告诉我我做错了什么吗?

谢谢

最佳答案

我认为您想在这里实例化两个单独的 Popen 对象,一个用于“ls”,另一个用于“sed”。您需要将第一个 Popen 对象的 stdout 属性作为 stdin 参数传递给第二个 Popen 对象。

例子:

p1 = subprocess.Popen('ls ...', stdout=subprocess.PIPE)
p2 = subprocess.Popen('sed ...', stdin=p1.stdout, stdout=subprocess.PIPE)
print p2.communicate()

如果您有更多命令,您可以继续以这种方式链接:

p3 = subprocess.Popen('prog', stdin=p2.stdout, ...)

参见 subprocess documentation有关如何使用子流程的更多信息。

关于python - 将多个 Popen 命令与管道链接起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39064672/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com