3

Я хотел бы знать, возможно ли зафиксировать прогресс загрузки, т. Е. Процент завершения загрузки, показанный 'yum' во время загрузки пакета. Захват, в том смысле, может быть в текстовом файле или программно с использованием JAVA, например, если я запускаю установщик yum из JAVA.

Я пробовал yum install pkg_name > captured , но он захватывает только стандартный вывод без информации о прогрессе.

Я также проверил stderr, нет результата.

Например

Setting up Install Process Resolving Dependencies

--> Running transaction check

---> Package wget.i686 0:1.12-4.fc14 set to be installed

--> Finished Dependency Resolution

Dependencies Resolved

================================================================================ Package Arch Version Repository Size

================================================================================

Installing: wget i686 1.12-4.fc14 updates 481 k

Transaction Summary

================================================================================ Install 1 Package(s)

Total download size: 481 k

Installed size: 1.8 M Downloading Packages:

Running rpm_check_debug

Running Transaction Test

Transaction Test Succeeded

Running Transaction

Installing : wget-1.12-4.fc14.i686 1/1

Installed:

Wget.i686 0:1.12-4.fc14

Complete! 

Наряду с приведенной выше информацией, я также хотел бы захватить часть прогресса, т.е. процент выполнения, который отображается под ярлыком «Загрузка пакетов:» во время загрузки.

Я не использую скрипты Python.

2 ответа2

6

Индикаторы выполнения записываются только тогда, когда выход идет на терминал. Вы можете смоделировать это с использованием ожидаемогоExpectJ являющимся реализацией Java), но синтаксический анализ вывода приложения (так называемый очистка экрана) может быть очень хрупким методом и сломаться при изменении вывода, например в зависимости от ширины выходного терминала, длины имен пакетов и возможно другие вещи.

Yum написан на python и может быть дополнен плагинами, так что вы можете попытаться написать плагин, чтобы поговорить с вашим приложением и сообщить о прогрессе, но это не выглядит для меня проблемой.

Вот документы, если вы решили пойти по этому пути.

Чтобы просто обернуть yum в ожидание, вы можете использовать что-то вроде:

#!/usr/bin/expect -f
set timeout 600
spawn yum -y install zsh-html
expect eof

После этого вы можете увидеть вывод и увидеть, какие пакеты там загружаются.

1

Я не думаю, что это поведение является терминалом против файла, для меня это связано с буферизацией.

Из моего опыта команда unbuffer работает довольно хорошо:

unbuffer yum install pkg_name > captured

и тогда вы можете следить за прогрессом:

tail -f -n 0 captured


В CentOS 7 использование yum provides '*/bin/unbuffer' чтобы найти пакет, предоставляющий команду unbuffer .

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