2

Я обрабатываю некоторые текстовые файлы с помощью моего собственного скрипта Python. Для отслеживания прогресса я использую команду PV. Сейчас я анализирую только несколько МБ данных, но хотел бы знать, сколько времени потребуется для обработки нескольких ГБ. Команда, которую я использовал, была

python command | pv -l -s 2g

Это дало мне выход

1,56M 0:03:06 [8,38k/s] [>                                    ]  0%             

Я знаю, что могу рассчитывать время на основе этих параметров, но я хочу автоматизировать этот процесс.

После прочтения руководства я нашел параметр -e, который дает ETA для данного размера

python command | pv -l -e -s 2g

Теперь я вижу, как отображается ETA при выполнении команды, но есть много других журналов из скрипта, которые покрывают это сообщение. Есть ли способ отобразить расчетное время (или сохранить последнее заданное ETA), когда сценарий заканчивается?

1 ответ1

1

Пытаться:

python command | pv -l -e -s 2g -f 2>pv.log
tr '\r' '\n' <pv.log | grep -v '^[[:space:]]*$' | tail -n1

Пояснения:

  • Вы можете pv распечатки PV в файл, перенаправив fd 2 (stderr) в этот файл. Вам также нужно заставить pv выдавать вывод (с -f), так как обычно он выводит вывод только тогда, когда обнаруживает, что stderr является терминалом.

  • Если вы сбрасываете распечатки таким образом, файл будет содержать все распечатки, а не только последние.

  • Распечатки будут ограничены символом "возврата" \r , который указывает терминалу переместить курсор в начало строки без переключения на следующую строку, поэтому следующая распечатка перезаписывает предыдущую. Команда tr превращает "return" \r в обычные "новые строки" \n .

  • Чтобы увидеть оригинальное содержимое pv.log , попробуйте cat -A pv.log . (cat будет отображать \r как ^M)

  • Программа grep удаляет все строки, содержащие только пробелы (пробелы или символы табуляции), так как они могут появиться после последних распечаток.

  • tail извлекает последнюю распечатку.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .