将一个Popen的stdout重定向到另一个Popen stdin

时间:2018-07-04 15:02:00

标签: python python-2.7 subprocess popen

我正在尝试使用以下代码块将一个进程的输出作为输入发送到另一进程:

p1 = Popen(command, stdout=PIPE)
p2 = Popen(dgxmcmd, stdin=p1.stdout, stdout= PIPE, stderr = PIPE)
output = p2.communicate()[0]

但是p2出现异常,因为没有这样的文件或目录。看来p1 stdout终止了。

Traceback (most recent call last):
File "/usr/bin/toolbox", line 160, in <module>
d.brokerProfile()
File "/usr/lib/python2.7/site-packages/toollib/deploy.py", line 340, in 
brokerProfile
self.dgxm(cmd1)
File "/usr/lib/python2.7/site-packages/toollib/deploy.py", line 327, in dgxm
p2 = Popen([dgxmcmd], stdin = p1.stdout, stdout = PIPE, stderr = PIPE)
File "/usr/lib64/python2.7/subprocess.py", line 390, in __init__
errread, errwrite)
File "/usr/lib64/python2.7/subprocess.py", line 1024, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory

无论如何想知道这里发生了什么?提前致谢。

其他信息:dgxm是接受命令的第三方工具。从p1动态生成命令,然后将其发送到p2以使用第三方工具执行。

1 个答案:

答案 0 :(得分:2)

相反,只需这样做

import os
p1 = os.popen(command)
p1=p1.read()
p2 = Popen(dgxmcmd, stdin=p1, stdout= PIPE, stderr = PIPE)
output = p2.communicate()[0]

在没有更多信息的情况下应该可以工作