How to check commit () progress in python_apt using apt.progress class?

I check this code provided by python_apt , but it is a bit outdated:

https://github.com/jolicloud/python-apt/blob/master/doc/examples/inst.py

All I'm trying to do is keep track of the progress of the commit() method; currently, when we call commit() and switch to fprogress and iprogress , I can see on the console that all packages in pkg_list loaded correctly, the problem arises after that.

The program continues to run, and it does not run dpkg_status_change() , I believe it should?

I don’t have the opportunity to know if the installation of several packages was successful

 import apt from apt.progress.base import InstallProgress class InstallStatusUpdate(InstallProgress): def conffile(self, current, new): print "conffile prompt: %s %s" % (current, new) def processing(self, pkg, stage): print "Processing ", pkg, " stage: ", stage def error(self, pkg, errormsg): print "Package ", pkg, " error: ", errormsg def finish_update(self): print "Installation is complete" def status_change(self, pkg, percent, status): print "Package: ", pkg, " at ", percent, " -> ", status def dpkg_status_change(self, pkg, status): print "Package ", pkg, ", Status: ", status def install_updates(self, pkg_list): fprogress = apt.progress.TextFetchProgress() iprogress = InstallStatusUpdate() cache_tmp = apt.Cache() cache_tmp.update() cache_tmp.open(None) for pkg in pkg_list: try: self.pkgname = cache_tmp[pkg.name] if self.pkgname.is_installed and self.pkgname.is_upgradable: self.pkgname.mark_upgrade() else: self.pkgname.mark_install() except Exception as e: print e.message result = self.pkgname.commit(fprogress, iprogress) #Maybe i'm doing something wrong here but result always = None... 
+7
source share
1 answer

Obviously, working with python_apt commit() is a pain, I ended up using subprocess to wait for everything to finish (as it should be) and analyze the output at the end to make sure the package is really up to date.

In _apt_update() I make sure that the system is online before trying to perform apt-get update , and then install the package passed to _apt_install().

  def _apt_update(self): import urllib2 try: response = urllib2.urlopen('http://74.125.113.99', timeout=1) #We have internet access subprocess.Popen(['apt-get', 'update']) return True except urllib2.URLError as err: pass return False def _apt_install(self, pkg, update=True): upgraded = 0 if update == True: self._apt_update() proc = subprocess.Popen(['apt-get', 'install', pkg, "-y"], stdout=subprocess.PIPE) for line in proc.stdout: if "upgraded" in line and "newly installed" in line and "to remove" in line: values = line.split(",") for pos in values: key, value = pos.split(" ") if value == "upgraded": upgraded = int(key) break print "Upgraded OK (", upgraded, ")" if upgraded > 0: return True else: return False 
+2
source

All Articles