将 subprocess.call 用于带有管道重定向的命令
Use subprocess.call for command with a pipe redirection
在这里阅读了其他答案后,我知道 shell=True
不受欢迎,但我在使用带有管道重定向的命令(更准确地说是一对命令?)时遇到了问题。
这个有效:
subprocess.call('echo "Test" | mail -s "Test" test@gmail.com', shell=True)
但这不是:
subprocess.call(["echo", "Test", "|", "mail", "-s", "'Test'", test@gmail.com"]))
关于如何使第二个工作的任何建议?
您可以执行如下操作以获得如下管道输出:
echo "Test" | mail -s "Test" test@gmail.com'
基本上,创建多个 subprocess.Popen
对象,将一个的标准输出指定为 PIPE,并将其作为标准输入提供给另一个对象:
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了解更多信息。
在这里阅读了其他答案后,我知道 shell=True
不受欢迎,但我在使用带有管道重定向的命令(更准确地说是一对命令?)时遇到了问题。
这个有效:
subprocess.call('echo "Test" | mail -s "Test" test@gmail.com', shell=True)
但这不是:
subprocess.call(["echo", "Test", "|", "mail", "-s", "'Test'", test@gmail.com"]))
关于如何使第二个工作的任何建议?
您可以执行如下操作以获得如下管道输出:
echo "Test" | mail -s "Test" test@gmail.com'
基本上,创建多个 subprocess.Popen
对象,将一个的标准输出指定为 PIPE,并将其作为标准输入提供给另一个对象:
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了解更多信息。