summaryrefslogtreecommitdiffstats
path: root/sca-cpp/trunk/modules/python/eval.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'sca-cpp/trunk/modules/python/eval.hpp')
-rw-r--r--sca-cpp/trunk/modules/python/eval.hpp24
1 files changed, 19 insertions, 5 deletions
diff --git a/sca-cpp/trunk/modules/python/eval.hpp b/sca-cpp/trunk/modules/python/eval.hpp
index 1b9392aed7..09c2cba92d 100644
--- a/sca-cpp/trunk/modules/python/eval.hpp
+++ b/sca-cpp/trunk/modules/python/eval.hpp
@@ -39,16 +39,23 @@ namespace python {
*/
class PythonRuntime {
public:
- PythonRuntime() {
- Py_Initialize();
-
+ PythonRuntime() : owner(true) {
+ Py_InitializeEx(0);
setupIO();
}
+ PythonRuntime(unused const PythonRuntime& r) : owner(false) {
+ }
+
~PythonRuntime() {
+ if (!owner)
+ return;
+ //Py_Finalize();
}
-} pythonRuntime;
+private:
+ const bool owner;
+};
/**
* Declare conversion functions.
@@ -211,8 +218,15 @@ const failable<value> evalScript(const value& expr, PyObject* script) {
// Get the requested function
PyObject* func = PyObject_GetAttrString(script, c_str(car<value>(expr)));
- if (func == NULL)
+ if (func == NULL) {
+
+ // The start, stop, and restart functions are optional
+ const value fn = car<value>(expr);
+ if (fn == "start" || fn == "stop" || fn == "restart")
+ return value(false);
+
return mkfailure<value>(string("Couldn't find function: ") + car<value>(expr) + " : " + lastError());
+ }
if (!PyCallable_Check(func)) {
Py_DECREF(func);
return mkfailure<value>(string("Couldn't find callable function: ") + car<value>(expr));