使用subprocess.call进行管道重定向命令

时间:2015-04-18 13:59:47

标签: python subprocess

在这里阅读了其他答案之后,我知道shell=True不赞成,但我遇到了一个带管道重定向的命令(更确切地说是一对命令?)。

这有效:

subprocess.call('echo "Test" | mail -s "Test" test@gmail.com', shell=True) 

但这不是:

subprocess.call(["echo", "Test", "|", "mail", "-s", "'Test'", test@gmail.com"]))

关于如何使第二个工作的任何建议?

1 个答案:

答案 0 :(得分:2)

您可以执行以下操作来获取此类管道输出:

echo "Test" | mail -s "Test" test@gmail.com'

基本上,创建多个subprocess.Popen对象,将一个stdout指定为PIPE,并将其作为stdin提供给另一个对象:

p1 = Popen(["echo", "Test"], stdout=PIPE)
p2 = Popen(["mail", "-s", "Test", "test@gmail.com"], stdin=p1.stdout, stdout=PIPE)
output = p2.communicate()[0]

您可以check this了解更多信息。