用sep格式化rpm查询输出

2024-07-07 06:56:44 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

我想要的是

^{pr2}$

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

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

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

那么,RPM(或其他一些工具)是否提供了允许期望输出的特性?在


Tags: name脚本内容列表数量字典version系统
2条回答

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

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

或者,就您的情况而言,您可以使用rpm -qai qf "\n####\n"。您将获得每个包的所有字段,但您设置的分隔符将位于它们之间。请注意,说明栏位可能包含多行文字,所以将\n用作分隔符可能是错误的。在

您可以使用man rpm了解更多细节。在

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

This documentation可能是个好的开始。在

相关问题 更多 >