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

2024-06-02 08:17:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用Booo::Python做一个混合的C++/Python应用程序:C++应用程序调用一个Python脚本集合,它又使用C++程序的函数、类等,作为Python对象公开。(Python 2.x.)

^ {CD1>}按预期将C++暴露为Python。在

我的初始化代码:

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

namespace bpl = boost::python;

现在,我希望我的C++代码也能获得^ {< CD2>}。在python中,只需编写globals()['MyModule']。但是这个(和类似的东西)在C++中是不工作的:

^{pr2}$

这在运行时失败

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__已经设置好了。导入的模块在哪里找不到。在


Tags: 函数代码pyimport程序脚本应用程序main
1条回答
网友
1楼 · 发布于 2024-06-02 08:17:48

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

以下是全局数据:

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

因为一切都是由智能指针管理的,所以直接返回和操作bpl::dict就可以了。在

^{pr2}$

相关问题 更多 >