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

c语言调用python

作者:诸神之翼   发布日期:2025-05-08   浏览:66

#include <Python.h>

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

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

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

    // 调用Python函数
    PyObject *pName = PyUnicode_DecodeFSDefault("my_module"); // 加载模块名称
    PyObject *pModule = PyImport_Import(pName);              // 导入模块
    Py_DECREF(pName);

    if (pModule != NULL) {
        PyObject *pFunc = PyObject_GetAttrString(pModule, "my_function"); // 获取函数

        if (pFunc && PyCallable_Check(pFunc)) {
            PyObject *pArgs = PyTuple_Pack(1, PyLong_FromLong(42)); // 准备参数
            PyObject *pValue = PyObject_CallObject(pFunc, pArgs);   // 调用函数

            if (pValue != NULL) {
                printf("Result of call: %ld\n", PyLong_AsLong(pValue)); // 输出结果
                Py_DECREF(pValue);
            } else {
                PyErr_Print();
            }
            Py_DECREF(pArgs);
            Py_DECREF(pFunc);
        } else {
            if (PyErr_Occurred())
                PyErr_Print();
        }
        Py_XDECREF(pFunc);
        Py_DECREF(pModule);
    } else {
        PyErr_Print();
        fprintf(stderr, "Failed to load \"my_module\"\n");
        return 1;
    }

    // 关闭Python解释器
    Py_Finalize();
    return 0;
}

解释说明:

  1. 初始化Python解释器

    • 使用 Py_Initialize() 来初始化Python解释器。
    • 检查是否初始化成功,如果失败则输出错误信息并返回。
  2. 执行Python代码

    • 使用 PyRun_SimpleString 来执行简单的Python代码字符串。这里我们打印了一条消息。
  3. 调用Python函数

    • 使用 PyUnicode_DecodeFSDefaultPyImport_Import 来加载一个Python模块(例如 my_module)。
    • 使用 PyObject_GetAttrString 来获取模块中的一个函数(例如 my_function)。
    • 检查该对象是否为可调用的,并使用 PyObject_CallObject 来调用它,传递适当的参数。
    • 处理返回值并输出结果。
  4. 错误处理

    • 在每个步骤中检查是否有错误发生,并使用 PyErr_Print() 来打印Python错误信息。
  5. 清理资源

    • 使用 Py_DECREF 来释放不再需要的Python对象。
    • 最后调用 Py_Finalize() 来关闭Python解释器。

这个示例展示了如何在C语言中嵌入Python解释器,并调用Python函数。你需要确保编译时链接了Python库,并且有相应的Python模块和函数可以调用。

上一篇:c++ 调用python脚本

下一篇:python弹窗代码

大家都在看

python时间格式

python ord和chr

python中的yield

python自定义异常

python list.pop

python的for i in range

npm config set python

python代码简单

python读取文件夹

python中turtle

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

Laravel 中文站