2011-12-04 40 views
1

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

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

,并当命令完成:

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

,或是否有更好的办法?

回答

6

调用subprocess.call会阻塞,直到命令完成。从documentation

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

一个类似的选项,也等待完成subprocess.check_callcallcheck_call之间的区别在于后者引发了非零返回码的例外,而前者返回所有情况下的返回码。

+3

出色答卷。 'check_call'虽然奖励点。 –

+0

@BrianCain谢谢你的建议。我已更新回答,以包含有关'subprocess.check_call'的信息。 –

1

documentation

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

要做到这一点异步(这样你不是等待),你会用subprocess.Popen

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]