Итак, я использую ручной тормоз и питон для кодирования видео по расписанию. Мне нужно отслеживать прогресс, потому что я использую его для оценки времени кодирования. Тогда я могу поместить его в свой планировщик.Python отслеживает ход Handbrake
У меня возникла проблема с получением ETA и% от процесса. Вот что у меня есть до сих пор
profile = ["HandBrakeCLI","-i",input,"-o","output","-e","x264"]
cp = subprocess.Popen(profile, stderr=subprocess.PIPE, bufsize=1)
for line in iter(cp.stderr.readline, b''):
# regex match for % complete and ETA
matches = re.match(r'.*(\d+\.\d+)\s%.*ETA\s(\d+)h(\d+)m(\d+)s', line.decode('utf-8'))
if matches:
print(matches.group())
print(line),
cp.stderr.close()
cp.wait()
Это не соответствует действительности, на самом деле я не совсем уверен, что происходит. Когда я бег моего сценария, я вижу ETA и% полной распечатку
Encoding: task 1 of 1, 1.19 % (45.57 fps, avg 62.74 fps, ETA 00h08m01s)
Я попытался с помощью стандартного вывода, но он не работает.
Я уверен, что проблема в том, что CLI Handbrake не выводит новые дополнительные строки каждый раз, когда процесс немного прогрессирует, а изменяет существующую строку. Попробуйте распечатать строку сразу после 'for line in inter..' и посмотреть, что она на самом деле дает вам. – advance512
не дал бы мне выход после выхода цикла for? поэтому, когда процесс завершен? Я хотел бы получить информацию в процессе. –
Прежде всего, вы повторяете stderr, возможно, вам нужно перебирать stdout. Во-вторых, я думаю, что cp.stderr.readline вернет полные строки из самого подпроцесса, а не одну повторно обновленную строку. Я бы напечатал последнюю строку после завершения процесса 'handbreak', чтобы посмотреть, как это выглядит. И, как я уже говорил, я печатал каждую строку в цикле for, чтобы понять, что я на самом деле получаю. – advance512