You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python解析命令输出获取CentOS RPM包信息及依赖列表

Python实现CentOS RPM包字段解析与依赖列表提取

字段提取实现

针对RPM相关命令的标准输出,可通过正则匹配提取package(包名)、Arch(架构)、Version(版本)三类字段,适配rpm -qa、yum/dnf安装预览输出、依赖查询输出等常见场景,代码如下:

import re
import subprocess
from typing import List, Dict

def parse_rpm_output(output_text: str) -> List[Dict]:
    pkg_result = []
    # 匹配标准RPM输出格式:包名.架构 版本号
    standard_pat = re.compile(r'^(\S+)\.(\S+)\s+(\S+)\s*$')
    # 匹配yum/dnf安装预览输出的包行格式
    yum_install_pat = re.compile(r'--->\s+Package\s+(\S+)\.(\S+)\s+\S+\s+\S+\s+(\S+)')

    for line in output_text.splitlines():
        line = line.strip()
        # 匹配标准格式行
        std_match = standard_pat.match(line)
        if std_match:
            pkg_name, arch, version = std_match.groups()
            if arch in ["x86_64", "i686", "noarch", "aarch64"]:
                pkg_result.append({
                    "package": pkg_name,
                    "Arch": arch,
                    "Version": version
                })
                continue
        # 匹配yum安装预览行
        yum_match = yum_install_pat.match(line)
        if yum_match:
            pkg_name, arch, version = yum_match.groups()
            pkg_result.append({
                "package": pkg_name,
                "Arch": arch,
                "Version": version
            })
    return pkg_result

安装依赖列表获取

要获取CentOS下指定软件安装所需的全量RPM包列表,不需要实际执行安装,直接调用yum/dnf的dry run参数即可拉取全量依赖,不会对系统造成改动,封装方法如下:

def get_required_rpms(target_pkg: str, pkg_manager: str = "yum") -> List[Dict]:
    """
    获取目标软件安装所需的全部RPM包
    :param target_pkg: 要安装的软件名,例如nginx、git
    :param pkg_manager: 包管理器,CentOS7填yum,CentOS8/Stream填dnf
    """
    proc = subprocess.run(
        [pkg_manager, "install", target_pkg, "--assumeno"],
        capture_output=True,
        text=True
    )
    # dry run存在需要安装的包时会返回非0退出码,属于正常场景,合并stdout和stderr解析
    full_output = proc.stdout + proc.stderr
    return parse_rpm_output(full_output)

# 调用示例
if __name__ == "__main__":
    rpm_list = get_required_rpms("nginx")
    for pkg in rpm_list:
        print(f"包名: {pkg['package']} | 架构: {pkg['Arch']} | 版本: {pkg['Version']}")

使用说明

  • 如果需要解析系统已安装的全量RPM包,可直接执行rpm -qa --qf '%{NAME}.%{ARCH} %{VERSION}-%{RELEASE}\n'获取格式化输出,解析准确率可达100%,无需做额外格式兼容
  • 架构匹配列表可根据实际运行环境扩展,上述代码已覆盖主流x86、ARM、通用无架构包场景
  • 若需要导出RPM文件用于离线安装,可搭配yumdownloader --resolve <包名>命令直接下载所有依赖的RPM安装包

内容的提问来源于stack exchange,提问作者Dhaval Zala

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 09:18:21