from enigma import eConsoleAppContainer from Tools.BoundFunction import boundFunction class Console(object): def __init__(self): self.appContainers = {} self.appResults = {} self.callbacks = {} self.extra_args = {} def ePopen(self, cmd, callback, extra_args=[]): name = cmd i = 0 while self.appContainers.has_key(name): name = cmd +'_'+ str(i) i += 1 print "[ePopen] command:", cmd self.appResults[name] = "" self.extra_args[name] = extra_args self.callbacks[name] = callback self.appContainers[name] = eConsoleAppContainer() self.appContainers[name].dataAvail.append(boundFunction(self.dataAvailCB,name)) self.appContainers[name].appClosed.append(boundFunction(self.finishedCB,name)) retval = self.appContainers[name].execute(cmd) if retval: self.finishedCB(name, retval) def dataAvailCB(self, name, data): self.appResults[name] += data def finishedCB(self, name, retval): del self.appContainers[name].dataAvail[:] del self.appContainers[name].appClosed[:] data = self.appResults[name] extra_args = self.extra_args[name] del self.appContainers[name] del self.extra_args[name] self.callbacks[name](data,retval,extra_args) del self.callbacks[name]