Here is a solution to embed the execution of your python module from within your C++ application. It’s not better or worst than forking/executing your python script through a system call, it just is a different way to do it. Whether it is best or not depend on your context and usage.
Some time ago I have coded a way to load python modules as plugins to a C++ application, here’s the interesting part.
Basically, you need to #include <Python.h>
, then Py_Initialize()
to start your python interpreter.
Then you do import sys
, using : PyRun_SimpleString("import sys");
, and you can load your plugin by doing PyRun_SimpleString('sys.path.append("path/to/my/module/")')
.
To exchange values between C++ and Python, things get harder, you have to to transform all your C++ objects into python objects (starting line 69 in my script).
Then you can call your function using PyObject_Call_Object(...)
, using all the python objects you created as arguments.
You get the return value, and transforms all those values in C++ objects. And don’t forget the memory management in all that!
To end your python interpreter, a simple call to Py_Finalize()
.
It really looks harder than it is really, but you have to be really careful doing this, because it could lead to leaks, security issues etc..