LINUX.ORG.RU

Фильтрация динамического вывода

 ,


0

1

Можно ли как-нибудь отфильтровать вывод таких программ как ffmpeg, wget, youtube-dl и т.п., чтобы показывало только определённые строки без "мусора"?

Нужно чтобы показывало только строку прогресса. Может как-то через pv..?

★★★★★

топорное решение: в цикле читать вывод, и n первые строк отправлять в /dev/null.

dikiy ★★☆☆☆
()
Ответ на: комментарий от alozovskoy

ну curl да, со временем перейду на него, просто к wget'у привык

teod0r ★★★★★
() автор топика
Ответ на: комментарий от dikiy

n первые строк не вариант. количество строк иногда разное. как бы грепом бы сделать был бы хороший вариант, вот только как?...

teod0r ★★★★★
() автор топика
Ответ на: комментарий от teod0r

n первые строк не вариант. количество строк иногда разное. как бы грепом бы сделать был бы хороший вариант, вот только как?...

детектить похожие?

dikiy ★★☆☆☆
()
Ответ на: комментарий от alozovskoy

как курлом качать файл (видео)? то что вгет нормально скачивает, курл качает как html

teod0r ★★★★★
() автор топика
Ответ на: комментарий от dikiy

детектить похожие?

ну а как? grep срабатывает только когда срока "завершится", т.е когда прогресс дойдёт до конца

teod0r ★★★★★
() автор топика

Может как-то через pv

pv такое не осилит: в общем виде тебе нужно чуть ли не эмулятор vt-100 внутри другого эмулятора vt-100 (оригинального терминала).

x3al ★★★★★
()
Ответ на: комментарий от teod0r

Возможно древняя версия ffmpeg, там был такой баг — -v quiet отменяло и -stats. Я проверял на ffmpeg 1.2.6 - работает.

Lavos ★★★★★
()

Динамические строки, как правило, делаются управляющими последовательностями, а значит могут парситься как обычный текст.

Для wget найдешь? Там совсем просто.

Вот вот рабочий вариант прогресс-бара для mplayer:

terminal 1 $ mplayer video.avi > delme.log
terminal 2 $ while true ; do A=`tail -n 1 delme.log | grep "^A:"` ; echo -ne "$A" ; sleep 0.1 ; done
Kroz ★★★★★
()
Последнее исправление: Kroz (всего исправлений: 1)
Ответ на: комментарий от alozovskoy

так и пробовал — сохраняет html

teod0r ★★★★★
() автор топика
Ответ на: комментарий от teod0r

В смысле?
Строка одна, в ней бегут циферки, как при обычной работе mplayer, только другого мусора нет. Если нужно каждый раз новую строку - убираешь -ne в echo.

Kroz ★★★★★
()
Ответ на: комментарий от teod0r

Хм, у меня перезаписывается.
В любом случае у тебя в переменной есть строка. Может у тебя не bash или другой тип терминала, найди путь как перезаписывать значение переменной на одно место, дальше мозаику можно собрать в то, что тебе нужно.

Kroz ★★★★★
()
Ответ на: комментарий от Kroz

странно что у тебя перезаписывается

найди путь как перезаписывать значение переменной на одно место

где мне это найти?

teod0r ★★★★★
() автор топика
Ответ на: комментарий от Kroz

\r

а!!! всё. ты там его забыл. с ним работает. спс

teod0r ★★★★★
() автор топика
Ответ на: комментарий от Kroz

кстати, как сделать чтобы было запущено в одном терминале?
запускаю в скрипте программу, которая пишет в файл из которого грепаю прогресс. запускаю эту прогу в бэкграунде, чтобы начал работать цикл с грепом.

Проблема в том, что при закрытии скрипта по ^C, программа продолжает работать, хотя я её не с nohup'ом запускаю. почему так?

teod0r ★★★★★
() автор топика
Ответ на: комментарий от Kroz

ещё такакя загадка:

в выводе youtube-dl в файл, строка содержащая '%' не грепается по '^\[download\]", хотя начинается с [download], а с '\[download\]' грепается.

там какой-то невидимый символ, тк с '^.\[download\]' грепается. что там за символ?

teod0r ★★★★★
() автор топика
Ответ на: комментарий от Kroz

ещё такая фигня:

почему-то в конечном результате получается строка
[download] 1.6% of 2.25GiB at 3.38MiB/s ETA 11:11wn ETA
заместо
[download] 1.6% of 2.25GiB at 3.38MiB/s ETA 11:11

т.е почему-то приписывается wn ETA.
а если посмотреть что в файле с помощью nano, то там

^M[download]   0.0% of 2.25GiB at     ---b/s ETA Unknown ETA^M[download]   0.0% of 2.25GiB at     ---b/s ETA Unknown ETA^M[download]   0.0% of 2.25GiB at  2.29MiB/s ETA 16:49^M[download[...и т.д....]

а cat нормально показывает

teod0r ★★★★★
() автор топика
Последнее исправление: teod0r (всего исправлений: 3)
Ответ на: комментарий от teod0r

Проблема в том, что при закрытии скрипта по ^C, программа продолжает работать, хотя я её не с nohup'ом запускаю. почему так?

Тогда тебе нужно перехватить сигнал Ctrl+C, из скрипта включить фоновые процессы, а потом завершить скрипт. Использовать ловушки: http://www.opennet.ru/docs/RUS/bash_scripting_guide/c13099.html , искать про ключевому слову «trap».

P. S. Ну у нас с тобой разные системы! Мой скрипт у меня работает без \r , А вот mplayer я не смог запустить в фоновом процессе, он «жмет на паузу», когда вызываешь с амперсандом вконце. Хотя, наверняка решение имеется.

Kroz ★★★★★
()
Ответ на: комментарий от teod0r

там какой-то невидимый символ, тк с '^.\[download\]' грепается. что там за символ?
[download] 1.6% of 2.25GiB at 3.38MiB/s ETA 11:11wn ETA
заместо
[download] 1.6% of 2.25GiB at 3.38MiB/s ETA 11:11

Это все управляющие последовательности. Их лучше всего смотреть в каком-нибудь HEX редакторе, тот, что под рукой, - в Midnight Commander делаешь F3, а потом F4 (шестнадцатеричный режим). По идее среди них не должно быть ничего, чего бы не было бы среди \r \n \t... . Но в общем случае, как в регулярках набирать произвольные символы через их шестнадцатеричные коды написано здесь: http://answers.oreilly.com/topic/214-how-to-match-nonprintable-characters-wit...

Kroz ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.