使用分隔符格式化 rpm 查询输出



我正在尝试获取系统上安装的所有软件包的列表。为此,我从 Python 脚本中调用"rpm -qai",其中对输出进行进一步转换。

我现在遇到了一个问题,即上述查询的输出没有分离不同的包。这看起来像这样:

$ rpm -qai
Name     : PackageName
Version  : 1.0
...
LastEntry: Something
Name     : NextPackageName
Version  : 1.1
...

我想要的是类似的东西

Name     : PackageName
Version  : 1.0
...
LastEntry: Something
//empty line or some other kind of separator
Name     : NextPackageName
Version  : 1.1
...

因为我的脚本逐行读取所有内容并将这些行保存在字典中。到目前为止,我的解决方法是检查当前行是否以"Name"开头,如果是,则继续将字典附加到列表中并清除字典;对于第一行,将跳过此步骤。

这个解决方案非常丑陋。不幸的是,固定数量的行不起作用,因为并非所有包都提供相同数量的信息。

我还考虑先运行"rpm -qai",从中检索所有软件包名称的列表,然后在调用"rpm -qi current_item"的同时遍历列表。然后可以从每个查询中获取输出。但由于这需要两次运行,我认为这是不必要的额外工作。

那么,RPM(或其他工具)是否提供了允许所需输出的功能?

有用于"正确"RPMDB接口的python绑定,而不是解析"rpm"输出。把它想象成 git 的瓷器与管道。事实上,yum都是python(上次我检查过)。我认为从长远来看,这对你来说会更好。

本文档可能是一个良好的开端。

您可以使用带有格式字符串rpm --qf|--queryformat标志来设置输出格式。

例如,您可以使用rpm -qa --qf "%{NAME} %{VERSION}n"来获取有关您想要分隔的每个包的感兴趣的字段。

或者,就您而言,您可以使用类似的东西rpm -qai --qf "n####n".您将获得有关每个包裹的所有字段,但您设置的分隔符将位于它们之间。请注意,"说明"字段可能包含多行文本,因此使用 作为分隔符可能是错误的。

您可以使用以下方法更详细地阅读man rpm

相关内容

  • 没有找到相关文章

最新更新