如何使用 Python 查找 debian 软件包信息
How to lookup debian package info with 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,但我不确定如何根据在线索引中的需要使用它。
谢谢!
您可以使用 subprocess 模块来 运行 apt-cache policy <app>
:
from subprocess import check_output
out = check_output(["apt-cache", "policy","python"])
print(out)
输出:
python:
Installed: 2.7.5-5ubuntu3
Candidate: 2.7.5-5ubuntu3
Version table:
*** 2.7.5-5ubuntu3 0
500 http://ie.archive.ubuntu.com/ubuntu/ trusty/main amd64 Packages
100 /var/lib/dpkg/status
您可以通过您尝试获取使用功能的信息的任何应用程序:
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
没有完全回答问题,但是阅读已安装的 Debian 软件包版本的一种非常优雅的方式
from pkg_resources import get_distribution
def get_distribution_version(service_name):
return get_distribution(service_name).version
我想使用 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,但我不确定如何根据在线索引中的需要使用它。
谢谢!
您可以使用 subprocess 模块来 运行 apt-cache policy <app>
:
from subprocess import check_output
out = check_output(["apt-cache", "policy","python"])
print(out)
输出:
python:
Installed: 2.7.5-5ubuntu3
Candidate: 2.7.5-5ubuntu3
Version table:
*** 2.7.5-5ubuntu3 0
500 http://ie.archive.ubuntu.com/ubuntu/ trusty/main amd64 Packages
100 /var/lib/dpkg/status
您可以通过您尝试获取使用功能的信息的任何应用程序:
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
没有完全回答问题,但是阅读已安装的 Debian 软件包版本的一种非常优雅的方式
from pkg_resources import get_distribution
def get_distribution_version(service_name):
return get_distribution(service_name).version