Problema com subclasse de python-apt InstallProgress

0

Estou tentando trazer partes do processo "apt-get upgrade" em um Raspberry Pi para um LCD de 20x4 que é a tela principal do dispositivo em que estou trabalhando. Estou executando o Raspbian 9 "Stretch".

Minha interface do usuário é escrita em python e, portanto, estou usando o python-apt para fornecer a interface para que eu controle e obtenha o status dos processos apt e dpkg.

Eu obtive a maioria disto trabalhando em um simples código de prova de conceito, mas eu acertei um obstáculo com a classe "InstallProgress" e não obtive nenhum sucesso nas funções "processing" ou "dpkg_status_change". Estou implementando isso via subclasses.

A melhor documentação que encontrei foi aqui , mas estou presa . Quaisquer dicas seriam bem vindas. Obrigado!

Aqui está o meu código PoC:

class myProgress(apt.progress.base.AcquireProgress):
    def done(self, oPkg):
            print "Done with ", oPkg.description, " ", self.fetched_bytes, " of ", self.total_bytes
    def fetch(self, oPkg):
            print "Fetching ", oPkg.shortdesc
    def start(self):
            print "Starting fetch process."
    def stop(self):
            print "Completed fetch process."

class myInstall(apt.progress.base.InstallProgress):
        def start_update(self):
                print "Package Update is starting."
        def finish_update(self):
                print "Package Update is complete. ", str(self.percent), "% done."
        def processing(self, pkg, stage):
                print "Processing ", str(pkg), " at stage ", str(stage), "."
        def dpkg_status_change(self, pkg, stage):
                print "Dpkg processing ", str(pkg), " at stage ", str(stage), "."

oCache=apt.cache.Cache()
oAcqProgress = myProgress()
oInstProgress = myInstall()

oCache.update( oAcqProgress )
oCache.open(None)
oCache.clear()
oCache.upgrade(dist_upgrade=True)

if (oCache.dpkg_journal_dirty == True):
        print "Dirty journal.  Fix this first!"

if len(oCache.get_changes()) > 0:
        print "Updates found."

for pkg in oCache.get_changes():
        print pkg.name, pkg.is_upgradable, pkg.marked_upgrade

print str(oCache.install_count), " marked for install."
print str(humanize.naturalsize(oCache.required_download)), "bytes require download."
oCache.commit( oAcqProgress, oInstProgress )

Aqui está o meu exemplo de saída:

Starting fetch process.
Fetching  Release.gpg
Done with  http://mirror.rit.edu/debian stretch Release.gpg   0  of  1
Completed fetch process.
Updates found.
wget True True
1  marked for install.
799.7 kB bytes require download.
Starting fetch process.
Fetching  wget
Done with  http://mirror.rit.edu/debian stretch/main amd64 wget amd64 1.18-5+deb9u1   0  of  799710
Completed fetch process.
Package Update is starting.
Reading changelogs... Done
(Reading database ... 40636 files and directories currently installed.)
Preparing to unpack .../wget_1.18-5+deb9u1_amd64.deb ...
Unpacking wget (1.18-5+deb9u1) over (1.18-5) ...
Setting up wget (1.18-5+deb9u1) ...
Processing triggers for man-db (2.7.6.1-2) ...
Package Update is complete.  83.3333 % done.

* Observe que os resultados do dpkg (linhas 14 - 19) estão em seu formato normal de texto dpkg.

    
por Peter B 31.12.2017 / 05:58

0 respostas