Задача: В python запустить процесс, читать его вывод и писать его в переменную. Покажу на примере ffmpeg.
С этим справляется следующий код
import subprocess
def func(cmd):
p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
while True:
line = p.stdout.readline()
print (line)
func("ffmpeg -i rtsp://admin:admin@192.168.1.2:554//h264Preview_01_main -vn -filter:a silencedetect=n=-30dB:d=1 -f null -")
Вывод читается отлично, ровно до момента пока ffmpeg заканчивает свои сообщения символом новой строки \n.
В какой то момент ffmpeg начинает просто перезаписывать последнюю строку при помощи \r и я не получаю никаких данных до момента пока он не скинет сообщение с символом новой строки.
Очевидно что проблема в readline().
Вопрос: Как писать содержимое stdout в переменную, не дожидаясь когда будет выведен символ новой строки?
Пытался мудрить с flush(), read(), communicate(), check_output(). Но у меня это все заканчивается либо зависанием программы, либо вывод не пишется в переменную.