我想知道是否可以在“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
。