blob: a9ad32f69841a5cb820124f4f9261b87527e436f (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
#include <lib/python/python.h>
#include <Python.h>
extern "C" void init_enigma();
ePython::ePython()
{
Py_Initialize();
init_enigma();
}
ePython::~ePython()
{
Py_Finalize();
}
int ePython::execute(const std::string &pythonfile, const std::string &funcname)
{
PyObject *pName, *pModule, *pDict, *pFunc, *pArgs, *pValue;
pName = PyString_FromString(pythonfile.c_str());
pModule = PyImport_Import(pName);
Py_DECREF(pName);
if (pModule != NULL)
{
pDict = PyModule_GetDict(pModule);
pFunc = PyDict_GetItemString(pDict, funcname.c_str());
if (pFunc && PyCallable_Check(pFunc))
{
pArgs = PyTuple_New(0);
// implement arguments..
pValue = PyObject_CallObject(pFunc, pArgs);
Py_DECREF(pArgs);
if (pValue != NULL)
{
printf("Result of call: %ld\n", PyInt_AsLong(pValue));
Py_DECREF(pValue);
} else
{
Py_DECREF(pModule);
PyErr_Print();
return 1;
}
}
} else
{
if (PyErr_Occurred())
PyErr_Print();
return 1;
}
return 0;
}
|