X-Git-Url: http://code.vuplus.com/gitweb/?p=vuplus_dvbapp;a=blobdiff_plain;f=lib%2Fpython%2FComponents%2FConsole.py;h=a41317eabc2b66c2d7f1159e760a6412038ae0b9;hp=c451eba79914e1acc43d94deec25e2166862e40f;hb=804ad88e6679853bd2db717fc542263d48075631;hpb=1b01c9c3c05fdd42327406161bd5c51e05fbca19 diff --git a/lib/python/Components/Console.py b/lib/python/Components/Console.py old mode 100644 new mode 100755 index c451eba..a41317e --- a/lib/python/Components/Console.py +++ b/lib/python/Components/Console.py @@ -8,7 +8,7 @@ class Console(object): self.callbacks = {} self.extra_args = {} - def ePopen(self, cmd, callback, extra_args=[]): + def ePopen(self, cmd, callback=None, extra_args=[]): name = cmd i = 0 while self.appContainers.has_key(name): @@ -21,10 +21,27 @@ class Console(object): 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 isinstance(cmd, str): # until .execute supports a better api + cmd = [cmd] + retval = self.appContainers[name].execute(*cmd) if retval: self.finishedCB(name, retval) + def eBatch(self, cmds, callback, extra_args=[], debug=False): + self.debug = debug + cmd = cmds.pop(0) + self.ePopen(cmd, self.eBatchCB, [cmds, callback, extra_args]) + + def eBatchCB(self, data, retval, _extra_args): + (cmds, callback, extra_args) = _extra_args + if self.debug: + print '[eBatch] retval=%s, cmds left=%d, data:\n%s' % (retval, len(cmds), data) + if len(cmds): + cmd = cmds.pop(0) + self.ePopen(cmd, self.eBatchCB, [cmds, callback, extra_args]) + else: + callback(extra_args) + def dataAvailCB(self, name, data): self.appResults[name] += data @@ -35,5 +52,15 @@ class Console(object): extra_args = self.extra_args[name] del self.appContainers[name] del self.extra_args[name] - self.callbacks[name](data,retval,extra_args) + if self.callbacks[name]: + self.callbacks[name](data,retval,extra_args) del self.callbacks[name] + + def kill(self,name): + if name in self.appContainers: + print "[Console] killing: ",self.appContainers[name] + self.appContainers[name].kill() + + def killAll(self): + for name in self.appContainers: + self.kill(name)