Python子流程管道

时间:2014-04-09 06:49:24

标签: python

我正在努力了解如何使用python管道命令。

我想做的是:

echo 'subject:Hello World' | "/usr/bin/xxx -C -P Support\\XXX vmail"

我试过这个,但它只是抛出了错误" TypeError:bufsize必须是一个整数"

subprocess.call("echo","subject:xxx","|","/usr/bin/xxx","-C","-P","Support\\XXX","vmail")

可以用python完成吗?

修改

我设法使用2个进程让它工作,但是如果我想将python对象(电子邮件消息)作为对象传递给外部程序而不是将其转换为字符串并回显它呢?

3 个答案:

答案 0 :(得分:5)

使用两个进程并将它们连接在一起。

import subprocess

with open("/tmp/out.txt", "w") as o:
    p1 = subprocess.Popen(["date"], stdout=subprocess.PIPE)
    p2 = subprocess.Popen(["cat"], stdin=p1.stdout, stdout=o)

这相当于

$ date | cat > /tmp/out.txt

答案 1 :(得分:0)

您可以将subprocess.check_outputshell=True

一起使用
output=check_output("echo subject:Hello World | /usr/bin/xxx -C -P Support\\XXX vmail", shell=True)

这是一个例子:

>>> output=subprocess.check_output('echo subject:Hello World | tr [:lower:] [:upper:]', shell=True)
>>> output
'SUBJECT:HELLO WORLD\n'

答案 2 :(得分:0)

可以这样做:

import os

os.system('"subject:Hello World" | "/usr/bin/xxx -C -P Support\\XXX vmail"')