2015-07-01 2 views
2

Я хочу, чтобы программно с помощью python я искал последнюю доступную версию пакета debian. Я огляделся, но не могу найти правильные ключевые слова, чтобы прорезать весь шум «python» «parse» «package» «index» перевернется.Как найти информацию о пакете debian с Python

Кто-нибудь знает способ загрузки и анализа такого индекса пакета?
Вот 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, но я не уверен, как это работает на то, что я необходимость в онлайн-индексе.

Спасибо!

ответ

2

Вы можете использовать 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 

Вы можете передать все, что приложение, которое вы пытаетесь получить информацию для использования fucntion:

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")) 

Если вы хотите, чтобы разобрать вывод, который вы можете использовать повторно:

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 
Смежные вопросы