c++ 调用python文件的程序
时间: 2023-09-20 10:11:58 浏览: 97
在 C++ 中调用 Python 可以使用 Python 的 C API 或者使用第三方库(如 Boost.Python)。这里介绍使用 Python 的 C API 的方法。
首先需要安装 Python 和对应的开发包。以 Ubuntu 为例,可以使用以下命令安装:
```
sudo apt-get update
sudo apt-get install python3-dev
```
接下来,可以使用以下代码在 C++ 中调用 Python:
```c++
#include <Python.h>
int main() {
Py_Initialize();
// 导入 Python 模块
PyObject* module = PyImport_ImportModule("example");
// 获取 Python 函数
PyObject* function = PyObject_GetAttrString(module, "example_function");
// 调用 Python 函数
PyObject* result = PyObject_CallObject(function, NULL);
// 处理函数返回值
if (result != NULL) {
// 如果返回值是字符串
if (PyUnicode_Check(result)) {
printf("Result: %s\n", PyUnicode_AsUTF8(result));
}
// 如果返回值是整数
else if (PyLong_Check(result)) {
printf("Result: %ld\n", PyLong_AsLong(result));
}
// 如果返回值是浮点数
else if (PyFloat_Check(result)) {
printf("Result: %f\n", PyFloat_AsDouble(result));
}
// 如果返回值是列表
else if (PyList_Check(result)) {
Py_ssize_t size = PyList_Size(result);
printf("Result: [");
for (Py_ssize_t i = 0; i < size; i++) {
PyObject* item = PyList_GetItem(result, i);
if (PyUnicode_Check(item)) {
printf("%s", PyUnicode_AsUTF8(item));
}
else if (PyLong_Check(item)) {
printf("%ld", PyLong_AsLong(item));
}
else if (PyFloat_Check(item)) {
printf("%f", PyFloat_AsDouble(item));
}
if (i < size - 1) {
printf(", ");
}
}
printf("]\n");
}
Py_DECREF(result);
}
else {
PyErr_Print();
}
// 释放资源
Py_DECREF(function);
Py_DECREF(module);
Py_Finalize();
return 0;
}
```
以上代码假设 Python 文件名为 `example.py`,文件内容如下:
```python
def example_function():
return "Hello, world!"
```
此时在 C++ 中调用 Python 函数 `example_function` 将会输出 `Result: Hello, world!`。
需要注意的是,使用 Python 的 C API 需要手动管理内存,需要使用 `Py_INCREF` 和 `Py_DECREF` 来增加和减少对象的引用计数,避免内存泄漏和野指针。
阅读全文