To get progress status and hook in at other stages in a transaction you need to use a callback
class simpleCallback: def __init__(self): self.fdnos = {} def callback(self, what, amount, total, mydata, wibble): """what -- callback type, amount -- if what == rpm.RPMCALLBACK_TRANS_START: pass elif what == rpm.RPMCALLBACK_INST_OPEN_FILE: hdr, path = mydata print "Installing %s\r" % (hdr["name"]) fd = os.open(path, os.O_RDONLY) nvr = '%s-%s-%s' % ( hdr['name'], hdr['version'], hdr['release'] ) self.fdnos[nvr] = fdno return fd elif what == rpm.RPMCALLBACK_INST_CLOSE_FILE: hdr, path = mydata nvr = '%s-%s-%s' % ( hdr['name'], hdr['version'], hdr['release'] ) os.close(self.fdnos[nvr]) elif what == rpm.RPMCALLBACK_INST_PROGRESS: hdr, path = mydata print "%s: %.5s%% done\r" % (hdr["name"], (float(amount) / total) * 100)