如何使用Python查询Debian软件包信息

2024-09-30 16:26:42 发布

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

我想使用python以编程方式查找debian包的最新可用版本。我四处看看,却找不到合适的关键字,把所有的杂音“python”“parse”“package”“index”恰巧翻过来了。在

有人知道加载和解析这样一个包索引的方法吗?
这是一个示例的URL,我无法用yaml或json解析它: http://packages.osrfoundation.org/gazebo/ubuntu/dists/trusty/main/binary-amd64/http://packages.osrfoundation.org/gazebo/ubuntu/dists/trusty/main/binary-amd64/Packages

我已经看过apt_pkg,但我不确定如何从联机索引中得到我所需要的。在

谢谢!在


Tags: org版本httpmainubuntupackages编程方式
1条回答
网友
1楼 · 发布于 2024-09-30 16:26:42

您可以使用subprocess模块来运行apt-cache policy <app>

from subprocess import check_output

out = check_output(["apt-cache", "policy","python"])
print(out)

输出:

^{pr2}$

您可以通过任何应用程序获取使用功能的信息:

from subprocess import check_output,CalledProcessError
def apt_cache(app):
    try:
        return check_output(["apt-cache", "policy",app])
    except CalledProcessError as e:
        return e.output

print(apt_cache("python"))

或者使用*args并运行您喜欢的任何命令:

from subprocess import check_output,CalledProcessError
def apt_cache(*args):
    try:
        return check_output(args)
    except CalledProcessError as e:
        return e.output

print(apt_cache("apt-cache","showpkg ","python"))

如果要分析输出,可以使用re:

import  re
from subprocess import check_output,CalledProcessError
def apt_cache(*args):
    try:
        out = check_output(args)
        m = re.search("Candidate:.*",out)
        return m.group() if m else "No match"
    except CalledProcessError as e:
        return e.output

print(apt_cache("apt-cache","policy","python"))
Candidate: 2.7.5-5ubuntu3

或者安装和候选:

def apt_cache(*args):
    try:
        out = check_output(args)
        m = re.findall("Candidate:.*|Installed:.*",out)
        return "{}\n{}".format(*m) if m else "No match"
    except CalledProcessError as e:
        return e.output
 print(apt_cache("apt-cache","policy","python"))

输出:

Installed: 2.7.5-5ubuntu3
Candidate: 2.7.5-5ubuntu3

相关问题 更多 >