如何在 C 中导入 len() 或 help() 等基本函数与 pybind11

发布于 2025-01-17 03:27:31 字数 435 浏览 0 评论 0原文

我对 pybind11 还很陌生,我试图在我的文件中导入/借用简单的 Python 函数,例如 len() 或 尤其 help() C++ 代码。

请注意,我不想在 C++ 中使用 pybinds.doc() 因为我想提取传递给 Python 函数的参数的名称和类型。

我已经熟悉:

auto fnc = py::reinterpret_borrow< py::function >( 
    py::module::import( "sys" ).attr( "path" ).attr( "append" ) );

但我找不到任何关于如何在特定 python 模块之外导入函数的定义。

I'm quite new to pybind11 and I was trying to import/borrow simple Python functions like len() or especially help() inside my C++ code.

Note that I don't want to use pybinds.doc() inside C++ since I want to extract names and types of the parameters passed to Python functions.

I'm already familiar with:

auto fnc = py::reinterpret_borrow< py::function >( 
    py::module::import( "sys" ).attr( "path" ).attr( "append" ) );

But I can't find any definition of how to import functions outside of specific python modules.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

一场春暖 2025-01-24 03:27:31

感谢 @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;

Thanks to @unddoch for mentioning the buitlins module.

Unfortunately help() is using sys.stdout by default. Therefore I switched to using pydoc.render_doc() to catch it as a string.

My working code looks like this:

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;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文