Pythonのsubprocess
モジュールとcommunicate()
メソッドを使用するときに終了コードを取得するにはどうすればよいですか?
関連コード:
import subprocess as sp
data = sp.Popen(openRTSP + opts.split(), stdout=sp.PIPE).communicate()[0]
これを別の方法で行う必要がありますか?
Pythonのsubprocess
モジュールとcommunicate()
メソッドを使用するときに終了コードを取得するにはどうすればよいですか?
関連コード:
import subprocess as sp
data = sp.Popen(openRTSP + opts.split(), stdout=sp.PIPE).communicate()[0]
これを別の方法で行う必要がありますか?
回答:
Popen.communicate
returncode
完了時に属性を設定します(*)。関連するドキュメントセクションは次のとおりです。
Popen.returncode
The child return code, set by poll() and wait() (and indirectly by communicate()).
A None value indicates that the process hasn’t terminated yet.
A negative value -N indicates that the child was terminated by signal N (Unix only).
だからあなたはちょうどすることができます(私はそれをテストしませんでしたが、うまくいくはずです):
import subprocess as sp
child = sp.Popen(openRTSP + opts.split(), stdout=sp.PIPE)
streamdata = child.communicate()[0]
rc = child.returncode
(*)これは、その実装方法が原因で発生します。子のストリームを読み取るようにスレッドを設定した後、それは呼び出すだけです wait
。
from subprocess import Popen
ます。Popen
代わりに、subprocess(or sp).Popen
おそらく読みやすさが向上し、行が短くなります
process.communicate()
から、returncode
いくつかの変数に割り当てる必要があります。を呼び出す前に割り当てを行う場合はcommunicate
、ですNone
。
まず、プロセスの実行が完了し、.wait
メソッドを使用して戻りコードが読み取られていることを確認する必要があります。これはコードを返します。後でアクセスしたい場合.returncode
は、Popen
オブジェクトと同じように保存されます。
.communicate()
サブプロセスが終了するのをすでに待機しています。
.poll()
戻りコードを更新します。
試す
child = sp.Popen(openRTSP + opts.split(), stdout=sp.PIPE)
returnCode = child.poll()
さらに、.poll()
が呼び出された後、戻りコードはとしてオブジェクトで使用できますchild.returncode
。
exitcode = data.wait()
。子プロセスが標準出力/エラーに書き込み、および/または標準入力から読み取り、ピアがない場合、ブロックされます。