如何使用 Boost.Python 在 Python 中调用内置函数

Posted

技术标签:

【中文标题】如何使用 Boost.Python 在 Python 中调用内置函数【英文标题】:How can I call built-in functions in Python using Boost.Python 【发布时间】:2018-11-02 11:20:01 【问题描述】:

我知道我们可以 import modules 并将 Python 代码嵌入 C++ 和 evaluate it。但是我怎样才能使用像printopen 这样的内置函数呢?这些功能当然不是模块。评估嵌入的 open 语句只会给我以下错误:

Traceback (most recent call last):
  File "<string>", line 1, in <module>
NameError: name 'open' is not defined

卡住了。请帮帮我。

【问题讨论】:

你可以import builtins,但不知道这是否有帮助...... 【参考方案1】:

尝试导入builtinsio 模块,如果您想要任何其他功能,只需调用__module__ 属性以查找要导入的模块

>>> print.__module__
'builtins'
>>> open.__module__
'io'

【讨论】:

你确定吗?如果显示NameErroropen.__module__ 将如何工作。 @scipsycho 我不明白它在哪里显示名称错误?我为此使用了python3 你是对的@AlbinPaul,但我只是说问这个问题的人有一个NameError,那么他怎么能跑open.__module__ @scipsycho 好的,函数 open 在 python3 中的模块 io 和 python2 中的 builtin 中定义,默认情况下在程序中导入,以避免在 c++ 中出现名称错误,OP 必须导入内置模块或 io 模块使其运行 感谢@AlbinPaul!不过,在我的环境中,open 似乎生活在__builtin__ 中。无论如何,通过导入__builtin__模块,我的问题已经解决了。

以上是关于如何使用 Boost.Python 在 Python 中调用内置函数的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Boost.Python 在 Python 中调用内置函数

如何使用 boost/python 向 python 公开 C++ 虚函数?

如何组织 python / Boost Python 项目

如何使用 Boost Python 从 C++ bool 转换为 Python boolean?

如何将 asyncio 与 boost.python 一起使用?

如何使用 Boost 获取 SyntaxError、NameError 等的 Python 错误信息