2011-12-04 4 views
1

私はPython内で2つ(またはそれ以上)のコマンドを呼び出せるようにしたいと思いますが、2番目の起動前に最初のコマンドが終了していることを確認したいと思います。それはsubprocessで可能ですか?たとえば、次のようにPython内で後続のコマンドを実行する

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

とそのコマンドが終了:

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

か良い方法はありますか?

答えて

6

subprocess.callを呼び出すと、コマンドが完了するまでブロックされます。 documentation

コマンドが完了するまで待ってから、returncode属性を返します。

同様に、完了を待つオプションはsubprocess.check_callです。 callcheck_callの違いは、後者がゼロ以外の戻りコードの例外を発生させ、前者がすべての場合の戻りコードを返すことです。 documentationから

+3

優秀な答え。しかし、ボーナスポイントのための 'check_call'。 –

+0

@BrianCainご提案いただきありがとうございます。私は 'subprocess.check_call'に関する情報を含めるように答えるように更新しました。 –

1

引数によって記述されたコマンドを実行します。コマンドが完了するまで待ってからreturncode属性を返します。非同期的にそれを行うには

(あなた待ちにならないように)あなたがsubprocess.Popenを使用します。

0

シェルパイプラインを再現しようとしていますか?

ので、その後、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] 
関連する問題