aboutsummaryrefslogtreecommitdiff
path: root/lib/python/Components/Console.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/python/Components/Console.py')
-rw-r--r--lib/python/Components/Console.py39
1 files changed, 39 insertions, 0 deletions
diff --git a/lib/python/Components/Console.py b/lib/python/Components/Console.py
new file mode 100644
index 00000000..45da72f2
--- /dev/null
+++ b/lib/python/Components/Console.py
@@ -0,0 +1,39 @@
+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.get().append(boundFunction(self.dataAvailCB,name))
+ self.appContainers[name].appClosed.get().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.get()[:]
+ del self.appContainers[name].appClosed.get()[:]
+ 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]