2017-01-05 61 views
0

我正在使用python.ffmpeg工作,當遠程服務器運行良好時,但是當遠程服務器關閉時,我可以在shell上看到消息'連接到TCP:// XXXXXXX失敗:連接被拒絕,布拉布拉」如何捕捉python上的ffmpeg連接錯誤

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

捕獲異常的方法1:

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

捕獲異常的方法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),shell仍然輸出ffmpeg信息,無論我在參數中添加了參數'stderr = sp.PIPE,stdout = sp.PIPE' 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