我正在努力了解如何使用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对象(电子邮件消息)作为对象传递给外部程序而不是将其转换为字符串并回显它呢?
答案 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_output
与shell=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"')