1 from enigma import eConsoleAppContainer
2 from Tools.BoundFunction import boundFunction
6 self.appContainers = {}
11 def ePopen(self, cmd, callback, extra_args=[]):
14 while self.appContainers.has_key(name):
15 name = cmd +'_'+ str(i)
17 print "[ePopen] command:", cmd
18 self.appResults[name] = ""
19 self.extra_args[name] = extra_args
20 self.callbacks[name] = callback
21 self.appContainers[name] = eConsoleAppContainer()
22 self.appContainers[name].dataAvail.append(boundFunction(self.dataAvailCB,name))
23 self.appContainers[name].appClosed.append(boundFunction(self.finishedCB,name))
24 retval = self.appContainers[name].execute(cmd)
26 self.finishedCB(name, retval)
28 def eBatch(self, cmds, callback, extra_args=[], debug=False):
31 self.ePopen(cmd, self.eBatchCB, [cmds, callback, extra_args])
33 def eBatchCB(self, data, retval, _extra_args):
34 (cmds, callback, extra_args) = _extra_args
36 print '[eBatch] retval=%s, cmds left=%d, data:\n%s' % (retval, len(cmds), data)
39 self.ePopen(cmd, self.eBatchCB, [cmds, callback, extra_args])
43 def dataAvailCB(self, name, data):
44 self.appResults[name] += data
46 def finishedCB(self, name, retval):
47 del self.appContainers[name].dataAvail[:]
48 del self.appContainers[name].appClosed[:]
49 data = self.appResults[name]
50 extra_args = self.extra_args[name]
51 del self.appContainers[name]
52 del self.extra_args[name]
53 self.callbacks[name](data,retval,extra_args)
54 del self.callbacks[name]