2017-01-05 2 views
0

Я работаю над ffmpeg с помощью python. Это работает, когда удаленный сервер работает хорошо, однако когда удаленный сервер отключен, я мог видеть сообщение на оболочке, говорящее ' Подключение к TCP: // ххххххх не удалось: Соединение отклонено, блабла»Как поймать ошибку подключения ffmpeg на python

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 (команда, preexec_fn = os.setsid), оболочка все еще выводит информацию 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 
Смежные вопросы