如何用Boost.Python从C++调用Python脚本中的函数?
在C++中用Boost.Python调用Python脚本的hello函数
没问题,我来帮你把这段C++代码补全,顺利调用Python脚本里的hello函数~
首先先确认你的script.py内容是这样的:
def hello(): print("Hello World")
接下来是补全后的完整C++代码,我会逐段解释每一步的作用:
#include <boost/python.hpp> #include <cstdlib> // setenv int main() { // 1. 设置Python模块搜索路径,让Python能找到你的script.py // 这里设为当前目录,你可以根据脚本实际路径调整 setenv("PYTHONPATH", ".", 1); // 2. 初始化Python解释器 boost::python::initialize(); try { // 3. 导入script.py模块 boost::python::object script_module = boost::python::import("script"); // 4. 获取模块中的hello函数 boost::python::object hello_func = script_module.attr("hello"); // 5. 调用hello函数 hello_func(); } catch (const boost::python::error_already_set&) { // 捕获Python抛出的异常,方便调试 PyErr_Print(); } // 6. 清理Python解释器 boost::python::finalize(); return 0; }
关键步骤说明:
- 设置PYTHONPATH:Python默认只会搜索系统路径和site-packages,通过
setenv把脚本所在目录加入搜索路径,确保能找到script.py。如果脚本在其他路径,把.换成对应的路径即可。 - 初始化/终止解释器:
boost::python::initialize()和boost::python::finalize()是Boost.Python操作Python环境的必要首尾步骤,必须成对调用。 - 导入模块与获取函数:
import("script")对应Python里的import script,attr("hello")则是获取模块中的hello函数对象。 - 异常捕获:加上
try-catch块捕获Python侧的异常,调用PyErr_Print()可以打印Python的错误信息,方便调试脚本或调用中的问题。
编译提示:
编译的时候需要链接Boost.Python库和对应版本的Python库,比如你的Python是3.10版本,Boost.Python编译的是对应版本,编译命令大概是:
g++ -o call_python call_python.cpp -lboost_python310 -lpython3.10
(注意替换成你实际的Boost.Python库名和Python版本)
内容的提问来源于stack exchange,提问作者sbunny
相关产品推荐
相关产品推荐

