diff options
| author | Andreas Frisch <andreas.frisch@multimedia-labs.de> | 2008-10-27 09:24:27 +0000 |
|---|---|---|
| committer | Andreas Frisch <andreas.frisch@multimedia-labs.de> | 2008-10-27 09:24:27 +0000 |
| commit | 98b800920d5ad05b854224bfa0ed0b18521788c4 (patch) | |
| tree | 6f1d192a5306ef4d7d2e4c4327734a5ee10a2c33 /lib/python/Components/Console.py | |
| parent | 4690ebce3b552f8c5fd45cd3ad773444d7355038 (diff) | |
| download | enigma2-98b800920d5ad05b854224bfa0ed0b18521788c4.tar.gz enigma2-98b800920d5ad05b854224bfa0ed0b18521788c4.zip | |
incorporate new class to support own asynchronous implementation of a "popen" system call using eAppContainer
Diffstat (limited to 'lib/python/Components/Console.py')
| -rw-r--r-- | lib/python/Components/Console.py | 39 |
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] |
