捕获 yum 进度条百分比

捕获 yum 进度条百分比

我想知道是否可以在“yum”下载软件包时捕获下载进度,即显示的下载完成百分比。捕获可以是文本文件,也可以使用 JAVA 以编程方式捕获,例如,如果我从 JAVA 运行 yum 安装程序。

我尝试过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 脚本。

答案1

仅当输出到终端时才会输出进度条。您可以使用以下方法模拟此操作预计(和期望J是 Java 实现),但解析应用程序输出 (称为屏幕抓取) 可能是一种非常脆弱的方法,并且当输出发生变化时会中断,例如取决于输出终端的宽度、包名称的长度以及其他因素。

Yum 是用 python 编写的,可以通过插件进行扩展,因此您可以尝试编写一个插件来与您的应用程序对话并通知进度,但对我来说这似乎不值得。

这里有文档如果你决定那么做。

要简单地将 yum 包装在 expect 中,你可以使用类似以下命令:

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

此后,您可以捕获输出并查看正在下载的包。

答案2

我不认为这种行为是一种终端对比文件问题,对我来说它与缓冲有关。

根据我的经验,该unbuffer命令运行良好:

unbuffer yum install pkg_name > captured

然后你就可以跟踪进度了:

tail -f -n 0 captured


在 CentOS 7 上,使用yum provides '*/bin/unbuffer'查找提供命令的包unbuffer

相关内容