我希望能够在python中调用两个(或更多)命令,但我想确保第一个命令在第二个启动之前完成。这可能与subprocess
?例如:在python中运行后续命令
subprocess.call("script1 input1 > out", shell=True)
,并当命令完成:
subprocess.call("script2 out>out2", shell=True)
,或是否有更好的办法?
我希望能够在python中调用两个(或更多)命令,但我想确保第一个命令在第二个启动之前完成。这可能与subprocess
?例如:在python中运行后续命令
subprocess.call("script1 input1 > out", shell=True)
,并当命令完成:
subprocess.call("script2 out>out2", shell=True)
,或是否有更好的办法?
调用subprocess.call
会阻塞,直到命令完成。从documentation:
等待命令完成,然后返回
returncode
属性。
一个类似的选项,也等待完成subprocess.check_call
。 call
和check_call
之间的区别在于后者引发了非零返回码的例外,而前者返回所有情况下的返回码。
你想重现一个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]
出色答卷。 'check_call'虽然奖励点。 –
@BrianCain谢谢你的建议。我已更新回答,以包含有关'subprocess.check_call'的信息。 –