Capturando el porcentaje de la barra de progreso de yum

3

Me gustaría saber si es posible capturar el progreso de la descarga, es decir, el porcentaje de descarga completa que muestra 'yum' mientras se descarga un paquete. La captura, en el sentido, podría ser a un archivo de texto o mediante programación usando JAVA, por ejemplo, si ejecuto el instalador yum desde JAVA.

Lo he intentado yum install pkg_name > captured, pero captura la salida estándar solo sin la información de progreso.

También he comprobado stderr, sin resultado.

P.ej

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! 

Junto con la información anterior, también me gustaría capturar la parte de progreso, es decir, el porcentaje completo que se muestra debajo de la etiqueta 'Descargando paquetes:' durante la descarga.

No uso scripts de Python.

SSaikia_JtheRocker
fuente

Respuestas:

7

Las barras de progreso se escriben solo cuando la salida va a la terminal. Puede simular eso con el uso de expect (con ExpectJ como implementación de Java), pero el análisis de la salida de la aplicación (cosa llamada raspado de pantalla) puede ser un método muy frágil y se rompería cuando la salida cambia, por ejemplo, dependiendo del ancho del terminal de salida, la longitud de los nombres de paquetes y Quizás otras cosas.

Yum está escrito en python y es extensible con complementos, por lo que puede intentar escribir un complemento para hablar con su aplicación y notificar sobre el progreso, pero no me parece que valga la pena.

Aquí están los documentos si decidiste seguir ese camino.

Para simplemente envolver yum en una expectativa, puede usar algo como:

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

Después de esto, puede obtener resultados y ver los paquetes que se descargan allí.

marciano
fuente
Eso fue muy útil. No tengo suficiente reputación como para darte una
oportunidad
Lecciones aprendidas: nunca responda una pregunta de alguien con baja reputación ;-) [¡No se preocupe por eso, me alegra ayudar!]
Martian
2
@JtheRocker He votado por ti :) Simplemente dando crédito donde se debe dar ...
Halil Özgür
1

No creo que este comportamiento sea una cuestión de terminal vs archivo, para mí tiene que ver con el almacenamiento en búfer.

Desde mi experiencia, el unbuffercomando funciona bastante bien:

unbuffer yum install pkg_name > captured

y luego puedes seguir el progreso:

tail -f -n 0 captured


En CentOS 7, use yum provides '*/bin/unbuffer'para encontrar el paquete que proporciona el unbuffercomando.

Elouan Keryell-Even
fuente