2016-09-26 11 views
0

私は、コマンドを取得してそれを実行デーモンが実行されている:私は後でそれで何かを決してPython:Popenのサブプロセスが参加する必要がありますか?

subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 

を、何のwait()、何communicate()

は大丈夫がそうするということではありませんか?
または必要なプロセスに参加していますか?

threading.deamon=Trueと同様のものがsubprocess.Popenにありますか?あなたがstdout=subprocess.PIPE, stderr=subprocess.PIPEを設定し、あなたが標準出力を取得したい場合は、あなたがこれを行うことができますので

答えて

0

p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
for line in p.stdout: 
    # do something here 
    #... 

あなたはcmdがデーモンとして実行され言うように、私はデーモンプロセスの中で実行すべきではないと思いますこちらです。一度あなたのpythonプロセスがエラーで終了すると、デーモンプロセスは終了し、あなたのデータは失われます。

そして、mysqlやlinuxコマンドなどのsubprocess.Popen()で他のプロセスを実行しても問題ありません。しかし、プロセスの状態(戻りコード)を知っておく必要がある場合は、poll()またはwait()を呼び出してプロセスの状態を確認する必要があります。詳細については、docs of subproces.Popenを参照してください。

+0

私はstdoutを望んでおらず、実行されたコマンドがそれを処理するので、返されたコードを気にしません。私はちょうどそれが待たされる必要があるかどうかを知りたかったのですか? – ealeon

+0

@ealeon、あなたが出力またはリターンコードを気にしない場合、Popenを呼び出した後、cmdがバックエンドで実行され、wait()を呼び出す必要はなく、プロセスが存在しても無効にならない他のエラーは発生しません。 –

関連する問題