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.communicatereturncode完了時に属性を設定します(*)。関連するドキュメントセクションは次のとおりです。
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()。子プロセスが標準出力/エラーに書き込み、および/または標準入力から読み取り、ピアがない場合、ブロックされます。