gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:18:39 25 4
gpt4 key购买 nike

我已经成功创建了一个 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();
}

关于python - 通过嵌入式 Python 调用 C++ 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29793023/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com