在python中运行后续命令

时间:2011-12-04 18:02:39

标签: python subprocess

我希望能够在python中调用两个(或更多)命令,但我想确保第一个在第二个启动之前完成。这可能与subprocess有关吗?例如:

subprocess.call("script1 input1 > out", shell=True)

当该命令完成时:

subprocess.call("script2 out>out2", shell=True)

还是有更好的方法吗?

3 个答案:

答案 0 :(得分:6)

在命令完成之前调用subprocess.call块。来自documentation

  

等待命令完成,然后返回returncode属性。

同样等待完成的选项是subprocess.check_callcallcheck_call之间的区别在于后者会引发非零返回码的异常,而前者会返回所有案例的返回码。

答案 1 :(得分:1)

来自documentation

  

运行 args 描述的命令。等待命令完成,然后返回returncode属性。

要异步执行此操作(以便等待),您将使用subprocess.Popen

答案 2 :(得分:0)

您是否尝试重现shell管道?

如果是这样,那么,调整example from the python docs,您的示例可能会变为:

from subprocess import Popen, PIPE
p1 = Popen([script1, input1], stdout=PIPE)
p2 = Popen([script2], stdin=p1.stdout, stdout=PIPE)
p1.stdout.close() # Allow p1 to receive a SIGPIPE if p2 exits.
output = p2.communicate()[0]