ScriptingEngine.cpp 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. #include <Python.h>
  2. #include "ScriptingEngine.h"
  3. extern "C" void initAnki(); /// Defined in BoostPythonInterfaces.cpp
  4. //======================================================================================================================
  5. // init =
  6. //======================================================================================================================
  7. bool ScriptingEngine::init()
  8. {
  9. INFO("Initializing scripting engine...");
  10. PyImport_AppendInittab((char*)("Anki"), &initAnki);
  11. Py_Initialize();
  12. mainModule = python::object(python::handle<>(python::borrowed(PyImport_AddModule("__main__"))));
  13. mainNamespace = mainModule.attr("__dict__");
  14. ankiModule = python::object(python::handle<>(PyImport_ImportModule("Anki")));
  15. //execScript("import Anki\n");
  16. INFO("Scripting engine initialized");
  17. return true;
  18. }
  19. //======================================================================================================================
  20. // execScript =
  21. //======================================================================================================================
  22. bool ScriptingEngine::execScript(const char* script, const char* scriptName)
  23. {
  24. try
  25. {
  26. python::handle<>ignored(PyRun_String(script, Py_file_input, mainNamespace.ptr(), mainNamespace.ptr()));
  27. }
  28. catch(python::error_already_set)
  29. {
  30. ERROR("Script \"" << scriptName << "\" failed with error:");
  31. PyErr_Print();
  32. return false;
  33. }
  34. return true;
  35. }