通过嵌入式 Python 调用C++代码

Calling C++ code via embedded Python

本文关键字:C++ 代码 调用 Python 嵌入式      更新时间:2023-10-16

我已成功创建了一个 Python 模块,该模块似乎可以独立工作,但不会影响运行它的程序。

我有以下模块:

BOOST_PYTHON_MODULE(mandala)
{
    class_<state_mgr_t, state_mgr_t*, noncopyable>("states", no_init)
        .def("push", &state_mgr_t::push)
        .def("pop", &state_mgr_t::pop)
        .def("count", &state_mgr_t::count);
    scope().attr("states") = boost::python::object(boost::python::ptr(&states));
}

states对象引用全局值,states

extern state_mgr_t states;

我可以从程序中运行以下脚本行:

from mandala import states
states.count()
> 0

所有这些都很好,但我预计运行这个python脚本会影响运行它的程序的实际状态。看起来好像Python实际上只是在处理它自己的states实例,而不会影响父程序。

现在我想知道我是否完全误解了Boost.Python的能力;我期待类似于Lua的东西,在那里我可以通过脚本修改C++程序。

这不可能吗?还是我做错了什么?

提前谢谢你!

如果要将

Python 嵌入到C++程序中,应该可以从脚本访问实例。显然,我没有您的完整代码,但是您是否尝试过这样的事情?

PyImport_AppendInittab("mandala", &initmandala);
Py_Initialize();
try {
    object main_module = import("__main__");
    object main_namespace = main_module.attr("__dict__");
    main_namespace.attr("states") = ptr(&states);
    object ignored = exec("print states.count()", main_namespace);
} catch(const error_already_set&) {
    PyErr_Print();
}