Непосредственно отвечая на вопрос, как задано:
Найден в источнике Yum (/usr/share/yum-cli/output.py):
if self.conf.debuglevel < 2 or not sys.stdout.isatty():
progressbar = None
callback = None
else:
progressbar = YumTextMeter(fo=sys.stdout)
callback = CacheProgressCallback()
Итак, хакерским решением было бы выделить pty для Yum ...
К сожалению, похоже, что стандартные библиотеки Java не предоставляют доступ к интерфейсу ptmx, который Linux использует для распределения PTY (хотя, возможно, это можно сделать с помощью привязки JNI - код не будет ужасно сложным; хотя быстрый поиск в Google не привел к появлению хороших фондовых библиотек, так что, возможно, что-то мне не хватает, или я подозреваю, что у кого-то должна быть такая, которая уже есть), так что «самый простой» способ сделать это может быть написать оболочку Python, которая обращается к внутренним объектам Yum, чтобы выполнить его назначение, и запрашивает обратный вызов. В любом случае, не чистая Java, но соединение с внешним интерпретатором Python (и, поскольку Yum - это Python, вы знаете, что он должен быть установлен) может быть менее трудным, чем связывание JNI с некоторым C-кодом. (Например, вы можете посмотреть на ProcessTransPackageKitCallback в /usr/share/PackageKit/helpers/yum/yumBackend.py)
Тем не менее:
В качестве альтернативы вы рассматривали возможность использования pkcon или DBus для общения с PackageKit?
Использование DBus не потребует внешних библиотек, но может потребовать небольшого переосмысления процесса установки. Есть библиотека Java DBus на http://dbus.freedesktop.org/doc/dbus-java/, которая оборачивает логику соединения, и в этом случае примеры на http://www.packagekit.org/pk-faq.html#session-methods должны дать вам суть доступа к ней. Я полагаю , что интерфейс DBus предоставляет способ проверки транзакции по ходу ее выполнения, но я недостаточно знаком с DBus, чтобы дать убедительное подтверждение этому. Это может быть наименее "хакерское" решение, которое я вижу; и, в качестве бонуса, он переносим, по крайней мере, в Ubuntu.
pkcon, однако, будет вариант. Похоже, что запись прогресса в stdout записывается в хорошем, разбираемом формате, даже несмотря на то, что он сокращает вывод, когда не является tty:
$ pkcon update > tmp < /dev/null & tail -f tmp
Transaction: Updating packages
Status: Waiting for authentication
Status: Waiting in queue
Status: Starting
Status: Resolving dependencies
Status: Downloading packages
Percentage: 10
Percentage: 40
Percentage: 50
Percentage: 70
Это фактический результат, поэтому степень детализации не так велика, но она выглядит довольно дружелюбно для анализа.
Боюсь, у меня нет коробки с Fedora 14 для сравнения - это на Fedora 15 - поэтому ваш пробег может отличаться.