NimManager.py: fix service searching with simple config
[enigma2.git] / lib / python / python.cpp
index b5a7abbf505928c50c6040013fdc00eef45d02d2..50b66103887caca878f17b3b2aac611d01d9aa30 100644 (file)
@@ -3,6 +3,8 @@
 #undef _POSIX_C_SOURCE
 #define _POSIX_C_SOURCE 200112L
 extern "C" void init_enigma();
+extern "C" void eBaseInit(void);
+extern "C" void eConsoleInit(void);
 extern void bsodFatal();
 
 #define SKIP_PART2
@@ -121,8 +123,11 @@ ePython::ePython()
 //     Py_OptimizeFlag = 1;
        
        Py_Initialize();
-       
+       PyEval_InitThreads();
+
        init_enigma();
+       eBaseInit();
+       eConsoleInit();
 }
 
 ePython::~ePython()
@@ -130,6 +135,16 @@ ePython::~ePython()
        Py_Finalize();
 }
 
+int ePython::execFile(const char *file)
+{
+       FILE *fp = fopen(file, "r");
+       if (!fp)
+               return -ENOENT;
+       int ret = PyRun_SimpleFile(fp, file);
+       fclose(fp);
+       return ret;
+}
+
 int ePython::execute(const std::string &pythonfile, const std::string &funcname)
 {
        ePyObject pName, pModule, pDict, pFunc, pArgs, pValue;
@@ -187,6 +202,11 @@ int ePython::call(ePyObject pFunc, ePyObject pArgs)
                } else
                {
                        PyErr_Print();
+                       ePyObject FuncStr = PyObject_Str(pFunc);
+                       ePyObject ArgStr = PyObject_Str(pArgs);
+                       eDebug("(PyObject_CallObject(%s,%s) failed)", PyString_AS_STRING(FuncStr), PyString_AS_STRING(ArgStr));
+                       Py_DECREF(FuncStr);
+                       Py_DECREF(ArgStr);
                        bsodFatal();
                }
        }