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

c调用python

作者:风外听竹   发布日期:2025-12-08   浏览:92

#include <Python.h>

int main(int argc, char *argv[]) {
    // 初始化Python解释器
    Py_Initialize();

    // 检查是否成功初始化
    if (!Py_IsInitialized()) {
        fprintf(stderr, "Failed to initialize Python\n");
        return 1;
    }

    // 执行简单的Python代码
    PyRun_SimpleString("print('Hello from Python!')");

    // 调用Python函数
    PyObject *pName, *pModule, *pDict, *pFunc;
    PyObject *pArgs, *pValue;

    // 导入Python模块
    pName = PyUnicode_DecodeFSDefault("example"); // example.py 文件名
    pModule = PyImport_Import(pName);
    Py_DECREF(pName);

    if (pModule != NULL) {
        // 获取模块的字典对象
        pDict = PyModule_GetDict(pModule);

        // 获取模块中的函数
        pFunc = PyDict_GetItemString(pDict, "my_function");

        if (pFunc && PyCallable_Check(pFunc)) {
            // 创建参数元组
            pArgs = PyTuple_New(1);
            pValue = PyLong_FromLong(42); // 参数值
            PyTuple_SetItem(pArgs, 0, pValue);

            // 调用Python函数
            PyObject *pResult = PyObject_CallObject(pFunc, pArgs);
            Py_DECREF(pArgs);

            if (pResult != NULL) {
                printf("Result of call: %ld\n", PyLong_AsLong(pResult));
                Py_DECREF(pResult);
            } else {
                PyErr_Print();
            }
        } else {
            if (PyErr_Occurred())
                PyErr_Print();
            fprintf(stderr, "Cannot find function \"my_function\"\n");
        }
        Py_XDECREF(pFunc);
        Py_DECREF(pModule);
    } else {
        PyErr_Print();
        fprintf(stderr, "Failed to load \"example\"\n");
        return 1;
    }

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

    return 0;
}

解释说明:

  1. 初始化Python解释器

    • 使用 Py_Initialize() 函数来初始化Python解释器。这是在C程序中调用任何Python API之前必须做的。
  2. 检查初始化状态

    • 使用 Py_IsInitialized() 检查Python解释器是否成功初始化,确保后续操作可以正常进行。
  3. 执行简单Python代码

    • 使用 PyRun_SimpleString() 可以直接执行一段Python代码字符串。这里我们打印了一条消息。
  4. 导入Python模块

    • 使用 PyImport_Import() 导入一个Python模块(假设模块名为 example)。这个模块应该包含你想要调用的Python函数。
  5. 获取模块字典和函数

    • 使用 PyModule_GetDict() 获取模块的字典对象,然后通过 PyDict_GetItemString() 获取模块中的函数对象。
  6. 创建参数并调用Python函数

    • 使用 PyTuple_New()PyLong_FromLong() 创建参数元组,并通过 PyObject_CallObject() 调用Python函数。
    • 如果调用成功,使用 PyLong_AsLong() 获取返回结果并打印。
  7. 错误处理

    • 在各个步骤中都进行了错误处理,确保如果出现问题可以及时捕获并输出错误信息。
  8. 关闭Python解释器

    • 最后使用 Py_Finalize() 关闭Python解释器,释放资源。

上一篇:python中的转义字符

下一篇:python range在for循环里的用法

大家都在看

python时间格式

pythoneval函数用法

python读取文件路径

staticmethod在python中有

python开发windows应用程序

python中len是什么意思

python ord和chr

python中的yield

python自定义异常

python判断路径是否存在

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

Laravel 中文站