2017-01-05 15 views
0

私はpythonでffmpegで作業しています。リモートサーバがうまく動作しているときに動作しますが、リモートサーバがダウンしているときにシェルで ' TCPの接続:// XXXXXXX失敗しました:接続が拒否されました、blabla」どのようにPythonのffmpeg接続エラーをキャッチする

pro = sp.Popen(command, preexec_fn=os.setsid, shell=False, stderr=sp.PIPE, stdout=sp.PIPE) 

catch例外的アプローチ1:

try: 
    out = self.pro.stderr.readline() 
    while out: 
      print '......' 
except BrokenPipeError: 
    print 'err' 

catch例外的アプローチ2:

for line in self.pro.stderr: 
    try: 
     print line 
    except BrokenPipeError: 
     print 'error' 

しかし、これらのどれも動作しません。

+0

あなたは ')(' Popen.communicate電話しましたか? – aergistal

+0

はい、私はPopen.commnicate()を使用しましたが、何も動作しません。私は「pro = sp.Popen(command、preexec_fn = os.setsid)」と感じていましたが、シェルは、「stderr = sp.PIPE、stdout = sp.PIPE」というパラメータを追加してもffmpeg情報を出力します。 Popenコマンド ' – user824624

答えて

0

communicate()はタプル(stdoutdata, stderrdata)を返しますので、あなただけの第二の要素を印刷する必要があります。

cmd = ('ffmpeg', '-hide_banner', '-i', 'tcp://127.0.0.1:10000', '-c', 'copy', '-f', 'null', '/dev/null'); 
s = subprocess.Popen(cmd, shell=False, preexec_fn=os.setsid, stderr=subprocess.PIPE) 
# print stderr 
print s.communicate()[1] 

出力:

$ ./test.py 
[tcp @ 0x55a01c945000] Connection to tcp://127.0.0.1:10000 failed: Connection refused 
tcp://127.0.0.1:10000: Connection refused 
関連する問題