在从事 C++ 项目时,我一直在寻找第三方库来处理不是我核心业务的东西。我找到了一个非常好的库,完全符合需要,但它是用 Python 编写的。我决定尝试使用 Boost.Python 库在 C++ 中嵌入 Python 代码。
C++ 代码如下所示:
#include <string>
#include <iostream>
#include <boost/python.hpp>
using namespace boost::python;
int main(int, char **)
{
Py_Initialize();
try
{
object module((handle<>(borrowed(PyImport_AddModule("__main__")))));
object name_space = module.attr("__dict__");
object ignored = exec("from myModule import MyFunc\n"
"MyFunc(\"some_arg\")\n",
name_space);
std::string res = extract<std::string>(name_space["result"]);
}
catch (error_already_set)
{
PyErr_Print();
}
Py_Finalize();
return 0;
}
Python 代码的(非常)简化版本如下所示:
import thirdparty
def MyFunc(some_arg):
result = thirdparty.go()
print result
现在的问题是:“MyFunc”执行得很好,我可以看到“结果”的打印。我不能做的是从 C++ 代码中读取“结果”。extract 命令永远不会在任何命名空间中找到“结果”。我尝试将“结果”定义为全局,我什至尝试返回一个元组,但我无法让它工作。