You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:38:56