繁体   English   中英

boost :: python混合嵌入/公开:如何获取globals()并查看自己的模块?

[英]boost::python hybrid embedding/exposing: how do I get globals() and see my own module?

我正在使用boost :: python来执行混合的C ++ / python应用程序:C ++应用程序调用了python脚本的集合,这些脚本随后使用了C ++程序的函数,类等(公开为python对象)。 (Python2.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__ ,我看到了许多设置__main__示例,如下所示:

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

这不会失败,并给出了当地人,但根据Py_Initialize文档__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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM