Integrating C++ with Python offers a powerful combination, allowing you to leverage the performance of C++ and the flexibility of Python. Integration between these two languages frequently presents challenges. This tutorial explains how to call a Python function that returns a list from C++.
Let's say we have a simple Python script named test.py
that defines a function returning a list:
def get_list():
return [1, 2, 3]
We created the C++ program that calls the get_list
function. The code gets the current script's path and includes it in Python's sys.path
, allowing the module to be imported. Then the code imports a Python module named test
and calls a function which returns a list. The retrieved list is converted into a C++ vector, and its elements are printed to the console.
#include <Python.h>
#include <filesystem>
#include <vector>
#include <iostream>
int main(int argc, char *argv[])
{
std::filesystem::path script(argv[0]);
Py_Initialize();
PyObject *sysPath = PySys_GetObject("path");
PyList_Insert(sysPath, 0, PyUnicode_FromString(script.parent_path().c_str()));
PyObject *pModule = PyImport_ImportModule("test");
PyObject *pFunc = PyObject_GetAttrString(pModule, "get_list");
PyObject *list = PyObject_CallNoArgs(pFunc);
Py_ssize_t size = PyList_Size(list);
std::vector<int> data;
data.reserve(size);
for (int i = 0; i < size; ++i) {
data.emplace_back(PyLong_AsLong(PyList_GetItem(list, i)));
}
for (int i = 0; i < size; ++i) {
std::cout << data[i] << std::endl;
}
Py_Finalize();
return 0;
}
Leave a Comment
Cancel reply