如何从已安装的 dnf 列表中获取可解析的输出?

如何从已安装的 dnf 列表中获取可解析的输出?

dnf list installed输出是人类可读的,但对机器解析器不太友好。是否有命令允许我们以 json 或 csv 或其他解析器友好的格式获取已安装的包? dnf 有 python 绑定提供更好的界面吗?

答案1

rpm命令提供了一些更灵活的选项来打印结果。要列出已安装的软件包,您可以使用rpm --query --all并使用 格式化输出--queryformat

例如,仅打印您可以使用的包的名称rpm -qa --queryformat "%{NAME}\n"。您可以使用类似语法进一步指定输出printf,并且可以使用rpm --querytags打印所有可用的“变量”rpm来打印有关包的信息。查看rpm 手册页了解更多信息。

是的,DNF 也有 Python 绑定,文档可用这里要获取已安装的软件包,您可以执行以下操作:

import dnf

base = dnf.Base()
base.fill_sack() 
q = base.sack.query() 
list(q.installed())

答案2

是否有命令允许我们以 JSON 或 CSV 或其他解析器友好的格式获取已安装的包?

也可以通过在示例中使用后处理来实现,例如

dnf list installed | tail -n +2 | awk -F '[.]' '{ print $1 }'

仅提供所有已安装软件包的名称列表。

可以通过添加以下内容将其转换为 JSON 格式

| jq --raw-input . | jq --slurp .

谢谢

其他问答

相关内容