LINUX.ORG.RU

Парсинг описания пакетов pacman

 , ,


0

1

В базе установленных пакетов pacman есть файлы desc с такой структурой:

%NAME%
audit

%VERSION%
2.8.5-3

%BASE%
audit

%DESC%
Userspace components of the audit framework

%URL%
https://people.redhat.com/sgrubb/audit

Такой формат как-то называется или это велосипед разрабов pacman? Есть какие-нибудь либы для Питона, чтобы это парсить?

Deleted

или это велосипед разрабов pacman

this

Есть какие-нибудь либы для Питона, чтобы это парсить?

Поищи биндинги к libalpm.

intelfx ★★★★★
()
Ответ на: комментарий от Deleted

А какая конечная цель?

Скрипт для автоматизации кое-каких действий.

Deleted
()
Ответ на: комментарий от intelfx

Так можно брать список установленных пакетов, а потом забирать описание через Repology.

С одной стороны накручивание абстракций сверх меры, но с другой ― работать с человеческим API будет проще и быстрее.

Deleted
()
Ответ на: комментарий от intelfx

А тебе нужно обязательно на чистом питоне?

Да

В чём конкретно проблема?

Проблемы пока нет, я её как раз пытаюсь создать

Deleted
()

Да вроде не такой и сложный формат.

Thetan ★★★
()

Простой формат же, навелосипедь парсилку.

#!/usr/bin/env python
from sys import argv


def parse_desc(filename):
    """Parse pacman description file and return a dictionary"""
    with open(filename) as fds:
        data = fds.read()
    result = dict()
    for i in data.split('\n\n'):
        if not i.strip():
            continue
        key, val = i.split('\n', 1)
        if '\n' in val:
            val = val.split('\n')
        result[key.strip('%')] = val
    return result


if __name__ == "__main__":
    print(parse_desc(argv[1]))
% /tmp/pacman_parse /var/lib/pacman/local/linux-5.2.2.arch1-1/desc
{'NAME': 'linux', 'VERSION': '5.2.2.arch1-1', 'BASE': 'linux', 'DESC': 'The Linux kernel and modules', 'URL': 'https://git.archlinux.org/linux.git/log/?h=v5.2.2-arch1', 'ARCH': 'x86_64', 'BUILDDATE': '1563736664', 'INSTALLDATE': '1563893707', 'PACKAGER': 'Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>', 'SIZE': '81199104', 'GROUPS': 'base', 'LICENSE': 'GPL2', 'VALIDATION': 'pgp', 'DEPENDS': ['coreutils', 'linux-firmware', 'kmod', 'mkinitcpio'], 'OPTDEPENDS': 'crda: to set the correct wireless channels of your country'}
anonymous
()
Ответ на: комментарий от Deleted

Судя по примеру, формат примитивный, проще парсер написать.

theNamelessOne ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.