Ошибка при попытке прочитать базу rpm на Python3 - PullRequest
0 голосов
/ 13 июня 2019

Я сталкиваюсь с ошибкой при попытке прочитать базы данных RPM в средах Linux.На некоторых версиях RHEL это работает отлично, но время от времени это терпит неудачу.То же относится и к CentOS или RHL.

Из баз данных я пытаюсь прочитать названия пакетов, их версии, их поставщиков.При вызове функции я отображаю «VALUE FOR OPEN RPM DB».

Во-первых, у нас есть метод, который будет читать установленные пакеты

#

    # Read installed package
    mi = self._rpmdb.dbMatch()
    for h in mi:
        name = h[rpm.RPMTAG_NAME].decode()
        version = h[rpm.RPMTAG_VERSION].decode()
        vendor = h[rpm.RPMTAG_VENDOR].decode()

        appmdl = Application.objects.create()
        appmdl.name = name
        appmdl.version = version
        appmdl.vendor = vendor
        appmdl.save()
        os_model.apps.add(appmdl)

        self.progress += self._one_percent
        current = int(self.progress * 100 / self.total)
        self.main_parser.progress = str(current) + r'%'

        try:
            self.main_parser.check_cancelled()
        except Exception as exc:
            self._close_rpmdb()
            raise exc

    # Close RPM DB
    self._close_rpmdb()

#

Тогда у меня есть функция открытия базы данных:

def _open_rpmdb(self, dbpath):
    '''
    Open RPM database.
    '''
    rpmdb = ifind(dbpath)
    if rpmdb:
        rpm.addMacro('_dbpath', rpmdb)
        solvets = rpm.TransactionSet()
        logging.info("Value for open rpm DB: {}".format(solvets.openDB()))
        if solvets.openDB() == 0:
            self._rpmdb = solvets

#

И здесь я вызываю свою функцию:

    # Open rpm database
    self._open_rpmdb(os_root + os.sep + r'var/lib/rpm/')

#

Иногда значение, возвращаемое функцией 'formatmat (resolts.openDB ()'), возвращает отрицательное значение, которое напоминает -31580, что означает, что базы данных RPM не читаются. В противном случае при выполнении чтения возвращаетсязначение 0

Я пытался обновить все свои установленные пакеты, но ничего не получалось. На самом деле я нахожу способ, который бы работал на всех функциях RedHat

...