Ответ 1
Вот решение для внедрения выполнения вашего модуля python из вашего приложения на С++. Это не лучше или хуже, чем форкирование/выполнение вашего python script через системный вызов, это просто другой способ сделать это. Является ли это лучше или не зависит от вашего контекста и использования.
Некоторое время назад я закодировал способ загрузки модулей python в качестве плагинов в приложение С++, здесь интересную часть.
В принципе, вам нужно #include <Python.h>
, затем Py_Initialize()
запустить ваш интерпретатор python.
Затем вы выполняете import sys
, используя: PyRun_SimpleString("import sys");
, и вы можете загрузить свой плагин, выполнив PyRun_SimpleString('sys.path.append("path/to/my/module/")')
.
Для обмена значениями между С++ и Python все становится сложнее, вам нужно преобразовать все объекты С++ в объекты python (стартовая строка 69 в моем script).
Затем вы можете вызвать свою функцию с помощью PyObject_Call_Object(...)
, используя все объекты python, созданные вами в качестве аргументов.
Вы получаете возвращаемое значение и преобразуете все эти значения в объекты С++. И не забывайте об управлении памятью во всем этом!
Чтобы закончить ваш интерпретатор python, просто вызвать Py_Finalize()
.
Это действительно выглядит сложнее, чем на самом деле, но вы должны быть очень осторожны, потому что это может привести к утечкам, проблемам безопасности и т.д.