gpt4 book ai didi

c++ - boost::python 混合嵌入/暴露:如何获取 globals() 并查看我自己的模块?

转载 作者:行者123 更新时间:2023-12-03 12:51:05 25 4
gpt4 key购买 nike

我正在使用 boost::python 来执行混合 C++/python 应用程序:C++ 应用程序调用 python 脚本集合,这些脚本又使用 C++ 程序的函数、类等,公开为 python 对象。 (Python 2.x。)

BOOST_PYTHON_MODULE(MyModule)按预期将 C++ 暴露给 python。

我的初始化代码:

Py_Initialize();
initMyModule(); // import MyModule

namespace bpl = boost::python;

现在我希望我的 C++ 代码到达 MyModule , 也。在Python中,你只需写globals()['MyModule'] 。但这(以及类似的东西)在 C++ 中不起作用:

bpl::object globals = bpl::eval("globals()");

这在运行时失败

File "<string>", line 1, in <module>; NameError: name 'globals' is not defined

顺便说一句,我看到很多设置__main__的例子像这样:

bpl::object m = bpl::import("__main__");
bpl::dict g = m.attr("__dict__"); // like locals(), but not globals()

这不会失败,并且给本地人,但根据 Py_Initialize docs , __main__已经设置好了。而且它不允许您查看全局变量,您可以在其中找到导入的模块。

最佳答案

您不需要显式的 bpl::import("__main__");

这是全局变量:

bpl::dict globals()
{
bpl::handle<> mainH(bpl::borrowed(PyImport_GetModuleDict()));
return bpl::extract<bpl::dict>(bpl::object(mainH));
}

由于一切都是由智能指针管理的,因此直接返回和操作 bpl::dict 就可以正常工作。

bpl::object myMod = globals()["MyModule"];
globals()["myNewGlobal"] = 88;

关于c++ - boost::python 混合嵌入/暴露:如何获取 globals() 并查看我自己的模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20121231/

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