我正在检查python_apt
提供的代码,但它似乎有点过时:
https://github.com/jolicloud/python-apt/blob/master/doc/examples/inst.py
我在这里所要做的就是跟踪commit()
方法的进度;目前当我们调用commit()
并传入fprogress
和{pkg_list
中的所有包都正确下载,问题似乎就在这之后。在
程序继续执行,但它并没有像我认为的那样触发dpkg_status_change()
?在
我不知道安装多个软件包是否成功?在
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...
显然,使用
python_apt
commit()
是一件痛苦的事,我最后使用subprocess
等待所有事情完成(就像它应该完成的那样),并在最后解析输出以验证包是否确实升级了。在在
_apt_update()
中,在尝试apt-get update
之前,我检查以确保系统处于联机状态,然后继续安装传入_apt_install().
的包相关问题 更多 >
编程相关推荐