Laravel  
laravel
文档
数据库
架构
入门
php技术
    
Laravelphp
laravel / php / java / vue / mysql / linux / python / javascript / html / css / c++ / c#

c++ 调用python

作者:旭旭移日   发布日期:2026-03-06   浏览:116

#include <Python.h>
#include <iostream>

int main() {
    // 初始化 Python 解释器
    Py_Initialize();

    // 检查 Python 解释器是否初始化成功
    if (!Py_IsInitialized()) {
        std::cerr << "Failed to initialize Python interpreter" << std::endl;
        return 1;
    }

    // 创建 Python 字符串对象
    PyObject* pName = PyUnicode_FromString("my_script");
    PyObject* pModule = NULL;

    // 加载 Python 脚本文件
    pModule = PyImport_Import(pName);

    // 检查模块是否加载成功
    if (pModule != NULL) {
        // 获取 Python 函数对象
        PyObject* pFunc = PyObject_GetAttrString(pModule, "my_function");

        // 检查函数是否存在且可调用
        if (pFunc && PyCallable_Check(pFunc)) {
            // 调用 Python 函数并获取返回值
            PyObject* pValue = PyObject_CallObject(pFunc, NULL);
            if (pValue != NULL) {
                // 处理返回值(这里假设返回值是整数)
                long result = PyLong_AsLong(pValue);
                std::cout << "Result of my_function: " << result << std::endl;
                Py_DECREF(pValue);
            } else {
                PyErr_Print();
            }
            Py_DECREF(pFunc);
        } else {
            if (PyErr_Occurred())
                PyErr_Print();
        }
        Py_XDECREF(pFunc);
        Py_DECREF(pModule);
    } else {
        PyErr_Print();
    }
    Py_DECREF(pName);

    // 关闭 Python 解释器
    Py_Finalize();

    return 0;
}

解释说明:

  1. 初始化 Python 解释器

    • 使用 Py_Initialize() 初始化 Python 解释器,确保可以在 C++ 程序中使用 Python。
  2. 加载 Python 脚本文件

    • 使用 PyImport_Import() 加载 Python 脚本文件。pName 是 Python 文件的名称(不带 .py 扩展名)。
  3. 获取 Python 函数对象

    • 使用 PyObject_GetAttrString() 获取 Python 文件中的指定函数对象(例如 my_function)。
  4. 检查函数是否可调用

    • 使用 PyCallable_Check() 检查获取到的对象是否是一个可调用的函数。
  5. 调用 Python 函数

    • 使用 PyObject_CallObject() 调用 Python 函数,并传递参数(如果有的话)。这里假设没有参数传递。
  6. 处理返回值

    • 使用 PyLong_AsLong() 将返回值转换为 C++ 的 long 类型,并输出结果。
  7. 错误处理

    • 如果在调用过程中发生错误,使用 PyErr_Print() 打印错误信息。
  8. 释放资源

    • 使用 Py_DECREF()Py_XDECREF() 释放不再需要的 Python 对象,以避免内存泄漏。
  9. 关闭 Python 解释器

    • 使用 Py_Finalize() 关闭 Python 解释器,结束 Python 运行时环境。

这个示例展示了如何从 C++ 中调用 Python 函数,并处理其返回值。请确保 Python 库已正确安装并在编译时链接了 Python 库。

上一篇:python 类型转换

下一篇:python怎么使用

大家都在看

python 二维码识别

python excel 库

python时间格式

pythoneval函数用法

列表切片操作python

python读取文件路径

staticmethod在python中有

python 保存json文件

python开发windows应用程序

python中len是什么意思

Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3

Laravel 中文站