#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;
}
初始化Python解释器:
Py_Initialize() 函数来初始化Python解释器。这是在C程序中调用任何Python API之前必须做的。检查初始化状态:
Py_IsInitialized() 检查Python解释器是否成功初始化,确保后续操作可以正常进行。执行简单Python代码:
PyRun_SimpleString() 可以直接执行一段Python代码字符串。这里我们打印了一条消息。导入Python模块:
PyImport_Import() 导入一个Python模块(假设模块名为 example)。这个模块应该包含你想要调用的Python函数。获取模块字典和函数:
PyModule_GetDict() 获取模块的字典对象,然后通过 PyDict_GetItemString() 获取模块中的函数对象。创建参数并调用Python函数:
PyTuple_New() 和 PyLong_FromLong() 创建参数元组,并通过 PyObject_CallObject() 调用Python函数。PyLong_AsLong() 获取返回结果并打印。错误处理:
关闭Python解释器:
Py_Finalize() 关闭Python解释器,释放资源。上一篇:python中的转义字符
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站