我正在尝试获取系统上安装的所有软件包的列表。为此,我从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(或其他一些工具)是否提供了允许期望输出的特性?在
您可以使用
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可能是个好的开始。在
相关问题 更多 >
编程相关推荐