嵌入式Python:从导入的模块获取func obj 我有一个Python模块,我从C++代码中导入(我正在嵌入Python)。这个模块包含一个函数“代码> CueTeE())/>代码>,我想在我的C++代码中得到它(即将它存储在 Boo::Python:对象< /Calp>实例)中。
这是我试过的。在C++代码中的指示行上出现运行时错误。发生此错误是因为在主命名空间中找不到“hero.create”函数 C++代码嵌入式Python:从导入的模块获取func obj 我有一个Python模块,我从C++代码中导入(我正在嵌入Python)。这个模块包含一个函数“代码> CueTeE())/>代码>,我想在我的C++代码中得到它(即将它存储在 Boo::Python:对象< /Calp>实例)中。,c++,python,boost,C++,Python,Boost,这是我试过的。在C++代码中的指示行上出现运行时错误。发生此错误是因为在主命名空间中找不到“hero.create”函数 C++代码 namespace python = boost::python; // Standard Boost.Python code // Here I just create objects for the main module and its namespace python::object main_module( python::handle<
namespace python = boost::python;
// Standard Boost.Python code
// Here I just create objects for the main module and its namespace
python::object main_module(
python::handle<>(python::borrowed(PyImport_AddModule("__main__")))
);
python::object main_namespace(main_module.attr("__dict__"));
// This is my code
//
python::exec("import hero", main_namespace, main_namespace);
python::object func(main_namespace["hero.create"]); // Run-time error
Entity ent = python::extract<Entity>(func());
// I also tried doing this, but it didn't work either...
// python::object func(main_namespace["hero"].attr("__dict__")["create"]);
// However, if I do this, all works fine...
// python::exec("from hero import create", main_namespace, main_namespace);
// python::object func(main_namespace["create"]); // No error
您需要执行
main\u名称空间[“hero”].attr(“create”)
。导入只在命名空间中创建一个名称,它是一个模块对象。名称中不能有点-
是一个getattr运算符-因此hero.create
与getattr(hero,'create')
相同
您还可以直接使用
boost::python::import
,而不是exec
ing import语句。您需要执行main\u namespace[“hero”].attr(“create”)
。导入只在命名空间中创建一个名称,它是一个模块对象。名称中不能有点-
是一个getattr运算符-因此hero.create
与getattr(hero,'create')
相同
您也可以直接使用
boost::python::import
,而不是exec
ing import语句。如果打印出hero,您会得到什么?您是否刚刚尝试了main_名称空间[“hero”].attr(“create”)
?我敢打赌你不会使用class.member
从C访问它。如果你打印出hero,你会得到什么?您是否刚刚尝试了main_名称空间[“hero”].attr(“create”)
?我敢打赌,您不会使用class.member
从C访问它。感谢您的回答以及有关python::import的提示。现在看起来干净多了我提出了一个后续问题()。如果愿意的话,您可以看一看吗?谢谢您的回答以及关于python::import的提示。现在看起来干净多了我提出了一个后续问题()。如果你愿意的话,请你看一下好吗?
from entity import Entity
def create():
ent = Entity()
# ...
return ent