2011-12-04 60 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]