16.3.2 Запросы к БД RPM

Для создания шаблонного итератора используется метод dbMatch экземпляра сета транзакции. Подобно C API шаблонный итератор позволяет программе перебирать пакеты, которые соответствуют шаблону по заданному критерию.

Вызов dbMatch без параметров означает, что будут перебираться все установленные пакеты. Базовый синтаксис:

import rpm

ts = rpm.TransactionSet()

mi = ts.dbMatch()

for h in mi:

# Do something with header object...

В этом примере вызов dbMatch возвращает шаблонный итератор. Цикл for обходит весь итератор, возвращая один объект хэдера за раз.

Кроме данного синтаксиса можно вызывать метод next для получения следующего объекта хэдера. Например:

import rpm

ts = rpm.TransactionSet()

mi = ts.dbMatch()

while mi:

h = mi.next()

# Do something with the header object

Прямой вызов метода next в будущих версиях Python API поддерживаться не будет.

Следующий листинг показывает пример скрипта на Python (rpmqa.py), который выводит имя, версию и релиз для всех установленных пакетов.

#!/usr/bin/python

# Acts like rpm -qa and lists the names of all the installed packages.

# Usage:

# python rpmqa.py

import rpm

ts = rpm.TransactionSet()

mi = ts.dbMatch()

for h in mi:

print "%s-%s-%s" % (h['name'], h['version'], h['release'])

При вызове скрипта мы увидим примерно следующий вывод (часть вывода убрана ради экономии места):

$ python rpmqa.py

libbonoboui-2.0.1-2

attr-2.0.8-3

dhclient-3.0pl1-9

file-3.37-8

hdparm-5.2-1

ksymoops-2.4.5-1

imlib-1.9.13-9

logwatch-2.6-8

mtr-0.49-7

openssh-clients-3.4p1-2

pax-3.0-4

python-optik-1.3-2

dump-0.4b28-4

sendmail-8.12.5-7

sudo-1.6.6-1

mkbootdisk-1.4.8-1

telnet-0.17-23

usbutils-0.9-7

wvdial-1.53-7

docbook-dtds-1.0-14

urw-fonts-2.0-26

db4-utils-4.0.14-14

libogg-devel-1.0-1

Если на скрипт установлены права выполнения, можно избежать вызова интерпретатора вместе с именем скрипта:

$ ./rpmqa.py

Далее - Работа с хэдером
Назад - Доступ к БД RPM
Содержание