在这里阅读了其他答案之后,我知道shell=True
不赞成,但我遇到了一个带管道重定向的命令(更确切地说是一对命令?)。
这有效:
subprocess.call('echo "Test" | mail -s "Test" test@gmail.com', shell=True)
但这不是:
subprocess.call(["echo", "Test", "|", "mail", "-s", "'Test'", test@gmail.com"]))
关于如何使第二个工作的任何建议?
答案 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了解更多信息。