Calling Python script from C++ and using its output

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..

Leave a Comment