如何使用 pybind11 在 C++ 中导入基本函数,如 len() 或 help()
How to import basic functions like len() or help() in C++ with pybind11
我是 pybind11 的新手,我正在尝试 import/borrow 简单的 Python 函数,例如 len()
或 特别是 help()
在我的 C++ 代码中。
请注意,我不想在 C++ 中使用 pybinds.doc()
,因为我想提取传递给 Python 函数的参数的名称和类型。
我已经熟悉:
auto fnc = py::reinterpret_borrow< py::function >(
py::module::import( "sys" ).attr( "path" ).attr( "append" ) );
但我找不到关于如何在特定 python 模块之外导入函数的任何定义。
感谢@unddoch 提到 buitlins
模块。
不幸的是,help()
默认使用 sys.stdout
。因此我转而使用 pydoc.render_doc()
将其作为字符串捕获。
我的工作代码如下所示:
py::function helpFnc = py::reinterpret_borrow< py::function >(
py::module::import( "pydoc" ).attr("render_doc") );
auto helpResult = helpfunc(pyExecute,"%s",0,py::module::import( "pydoc" ).attr("plaintext"));
std::cout << "Help in C++: " << helpResult.cast<std::string>() << std::endl;
我是 pybind11 的新手,我正在尝试 import/borrow 简单的 Python 函数,例如 len()
或 特别是 help()
在我的 C++ 代码中。
请注意,我不想在 C++ 中使用 pybinds.doc()
,因为我想提取传递给 Python 函数的参数的名称和类型。
我已经熟悉:
auto fnc = py::reinterpret_borrow< py::function >(
py::module::import( "sys" ).attr( "path" ).attr( "append" ) );
但我找不到关于如何在特定 python 模块之外导入函数的任何定义。
感谢@unddoch 提到 buitlins
模块。
不幸的是,help()
默认使用 sys.stdout
。因此我转而使用 pydoc.render_doc()
将其作为字符串捕获。
我的工作代码如下所示:
py::function helpFnc = py::reinterpret_borrow< py::function >(
py::module::import( "pydoc" ).attr("render_doc") );
auto helpResult = helpfunc(pyExecute,"%s",0,py::module::import( "pydoc" ).attr("plaintext"));
std::cout << "Help in C++: " << helpResult.cast<std::string>() << std::endl;