Return 从 python 到 C++ 的数组
Return an array from python to C++
我正在编写一个 c++ 代码来调用 python 函数,并且 python 函数中的 returned 数组将存储在 c++ 中的一个数组中。我可以在 C++ 中调用 python 函数,但我只能 return 从 Python 到 C++ 的一个值,而我想要 return 的是一个数组。下面是我的 C++ 代码:
int main(int argc, char *argv[])
{
int i;
PyObject *pName, *pModule, *pDict, *pFunc, *pArgs, *pValue;
if (argc < 3)
{
printf("Usage: exe_name python_source function_name\n");
return 1;
}
// Initialize the Python Interpreter
Py_Initialize();
// Build the name object
pName = PyString_FromString(argv[1]);
// Load the module object
pModule = PyImport_Import(pName);
// pDict is a borrowed reference
pDict = PyModule_GetDict(pModule);
// pFunc is also a borrowed reference
pFunc = PyDict_GetItemString(pDict, argv[2]);
pValue = PyObject_CallObject(pFunc, NULL);
if (pValue != NULL)
{
printf("Return of call : %d\n", PyInt_AsLong(pValue));
PyErr_Print();
Py_DECREF(pValue);
}
else
{
PyErr_Print();
}
这里pValue应该取的值是一个数组,但是只取一个元素也能成功执行
我无法理解如何将数组从 python 传递到 C++。
A Python list 是 1 个对象。你能 return 来自 python 的列表并检查你是否用 PyList_Check
在 C++ 中得到它?然后用PyList_Size
看多长时间,用PyList_GetItem
.
捞出项目
在 Chris 的指导下,我解决了上述问题,具体如下:
当 return 从 Python 中获取数据时,return 是列表而不是数组。
pValue = PyObject_CallObject(pFunc, pArgTuple);
Py_DECREF(pArgTuple);
if (pValue != NULL)
{
printf("Result of call: %d\n", PyList_Check(pValue));
int count = (int) PyList_Size(pValue);
printf("count : %d\n",count);
float temp[count];
PyObject *ptemp, *objectsRepresentation ;
char* a11;
for (i = 0 ; i < count ; i++ )
{
ptemp = PyList_GetItem(pValue,i);
objectsRepresentation = PyObject_Repr(ptemp);
a11 = PyString_AsString(objectsRepresentation);
temp[i] = (float)strtod(a11,NULL);
}
在这里,您的 float 临时数组将保存您作为列表从 python 发送的数组。
我正在编写一个 c++ 代码来调用 python 函数,并且 python 函数中的 returned 数组将存储在 c++ 中的一个数组中。我可以在 C++ 中调用 python 函数,但我只能 return 从 Python 到 C++ 的一个值,而我想要 return 的是一个数组。下面是我的 C++ 代码:
int main(int argc, char *argv[])
{
int i;
PyObject *pName, *pModule, *pDict, *pFunc, *pArgs, *pValue;
if (argc < 3)
{
printf("Usage: exe_name python_source function_name\n");
return 1;
}
// Initialize the Python Interpreter
Py_Initialize();
// Build the name object
pName = PyString_FromString(argv[1]);
// Load the module object
pModule = PyImport_Import(pName);
// pDict is a borrowed reference
pDict = PyModule_GetDict(pModule);
// pFunc is also a borrowed reference
pFunc = PyDict_GetItemString(pDict, argv[2]);
pValue = PyObject_CallObject(pFunc, NULL);
if (pValue != NULL)
{
printf("Return of call : %d\n", PyInt_AsLong(pValue));
PyErr_Print();
Py_DECREF(pValue);
}
else
{
PyErr_Print();
}
这里pValue应该取的值是一个数组,但是只取一个元素也能成功执行
我无法理解如何将数组从 python 传递到 C++。
A Python list 是 1 个对象。你能 return 来自 python 的列表并检查你是否用 PyList_Check
在 C++ 中得到它?然后用PyList_Size
看多长时间,用PyList_GetItem
.
在 Chris 的指导下,我解决了上述问题,具体如下:
当 return 从 Python 中获取数据时,return 是列表而不是数组。
pValue = PyObject_CallObject(pFunc, pArgTuple);
Py_DECREF(pArgTuple);
if (pValue != NULL)
{
printf("Result of call: %d\n", PyList_Check(pValue));
int count = (int) PyList_Size(pValue);
printf("count : %d\n",count);
float temp[count];
PyObject *ptemp, *objectsRepresentation ;
char* a11;
for (i = 0 ; i < count ; i++ )
{
ptemp = PyList_GetItem(pValue,i);
objectsRepresentation = PyObject_Repr(ptemp);
a11 = PyString_AsString(objectsRepresentation);
temp[i] = (float)strtod(a11,NULL);
}
在这里,您的 float 临时数组将保存您作为列表从 python 发送的数组。