@wintreist

Существует ли Progress Bar для python, который легко считывать сторонними скриптами?

Хочу добавить Progress Bar в мой Python скрипт, который я буду запускать из GUI с помощью subprocess.run, и нужен такой Progress Bar, который легко считывается, и обрабатывается. Наткнулся на вопрос, но может кто сталкивался, делал так уже, что лучше использовать и как это обрабатывать?
  • Вопрос задан
  • 119 просмотров
Пригласить эксперта
Ответы на вопрос 1
trapwalker
@trapwalker
Программист, энтузиаст
Не надо парсить прогресс-бар, то что вам нужно делается иначе.
Во-первых, питоновский скрипт по атрибутам объекта sys.stdout может судить куда направлен выхлоп. Вариантов, по сути, два: файл или пайп, либо в терминал.
Обычно если stdout является терминалом, то в него шлют по умолчанию красивый отформатированный выхлоп с цветами, псевдографикой, эмоджи и свистелками вроде симпатичных прогресс-баров с переписыванием текста поверх старых строк.
Если это не TTY, то выдаём упрощенно оформленый вывод.
Благодаря тому, что у нас символы и разные, можно делать в конце строки с прогрессбаром только возврат каретки без перевода строки, тогда следующая рисуется поверх предыдущей и создаёт эффект прогрессбара. Если этот же выхлоп ещё и идёт в пайп или файл, то там все состояния прогрессбара будут растянуты по отдельным строкам.

Для облегчения работы с такими утилитами можно сделать им специальный ключ или параметр командной строки, который включит специальный режим выхлопа, предназначенный для простого парсинга результата. Например в таком особом режиме утилита может выдавать указанные динамические параметры в виде csv-строк с разделителями. Тогда GUI их сможет тривиально парсить прямо в потоке.

Резюмирую. Используйте любую библиотеку для рисования прогрессбара. Большинство из них умеют делать нужный регресс при обнаружении пайпа на stdout. Но если она и не умеет, то вы можете это реализовать самостоятельно, просто добавив ключ и\или проверку на TTY.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы