从C+;调用的python方法返回列表+;
我试图从C++代码调用Python方法,而我调用的方法将文件名作为参数返回列表。 我的示例代码当前将方法调用的PyObject*结果转换为double,但我想将其转换为列表从C+;调用的python方法返回列表+;,python,c++,python-c-api,Python,C++,Python C Api,我试图从C++代码调用Python方法,而我调用的方法将文件名作为参数返回列表。 我的示例代码当前将方法调用的PyObject*结果转换为double,但我想将其转换为列表 #include "include.h" int main(int argc, char* argv[]) { double answer = 0; PyObject *modname, *mod, *mdict, *func, *stringarg, *args, *result; Py_Initia
#include "include.h"
int main(int argc, char* argv[])
{
double answer = 0;
PyObject *modname, *mod, *mdict, *func, *stringarg, *args, *result;
Py_Initialize();
PyRun_SimpleString("import sys");
modname = PyUnicode_FromString("module");
mod = PyImport_Import(modname);
if (!mod)
{
PyErr_Print();
exit(1);
}
mdict = PyModule_GetDict(mod);
func = PyDict_GetItemString(mdict, "func");
if (!func)
{
printf("function does not exist\n");
}
stringarg = PyUnicode_FromString("test.txt");
args = PyTuple_New(1);
PyTuple_SetItem(args, 0, stringarg);
result = PyObject_CallObject(func, args);
if (result)
{
answer = PyFloat_AsDouble(result);
Py_XDECREF(result);
}
Py_XDECREF(stringarg);
Py_XDECREF(args);
Py_XDECREF(mod);
Py_XDECREF(modname);
Py_Finalize();
return 0;
}
我该怎么做呢?我看到过创建作为参数传递的列表对象的包装类示例,但没有看到将返回值转换为列表的示例。您正在查找API的以下部分:
#include "include.h"
int main(int argc, char* argv[])
{
double answer = 0;
PyObject *modname, *mod, *mdict, *func, *stringarg, *args, *result;
Py_Initialize();
PyRun_SimpleString("import sys");
modname = PyUnicode_FromString("module");
mod = PyImport_Import(modname);
if (!mod)
{
PyErr_Print();
exit(1);
}
mdict = PyModule_GetDict(mod);
func = PyDict_GetItemString(mdict, "func");
if (!func)
{
printf("function does not exist\n");
}
stringarg = PyUnicode_FromString("test.txt");
args = PyTuple_New(1);
PyTuple_SetItem(args, 0, stringarg);
result = PyObject_CallObject(func, args);
if (result)
{
answer = PyFloat_AsDouble(result);
Py_XDECREF(result);
}
Py_XDECREF(stringarg);
Py_XDECREF(args);
Py_XDECREF(mod);
Py_XDECREF(modname);
Py_Finalize();
return 0;
}
result = PyObject_CallObject(func, args);
if (PyList_Check(result)) {
// okay, it's a list
for (Py_ssize_t i = 0; i < PyList_Size(result); ++i) {
PyObject* next = PyList_GetItem(result, i);
// do something with next
}
}
result=PyObject\u CallObject(func,args);
如果(PyList_检查(结果)){
//好的,这是一张单子
对于(Py_ssize_t i=0;i
您正在查找API的以下部分:
result = PyObject_CallObject(func, args);
if (PyList_Check(result)) {
// okay, it's a list
for (Py_ssize_t i = 0; i < PyList_Size(result); ++i) {
PyObject* next = PyList_GetItem(result, i);
// do something with next
}
}
result=PyObject\u CallObject(func,args);
如果(PyList_检查(结果)){
//好的,这是一张单子
对于(Py_ssize_t i=0;i
转换为列表是什么意思?现在,您似乎假设它返回一个浮点值。你只想得到一个浮点数的列表吗?正如我所说的“我的示例代码目前将PyObject*结果转换为double,但我想将其转换为列表”。当我要求澄清你的问题时,我并不是想让你直接引用我要求澄清的部分。将一个双精度转换成一个列表对你意味着什么?没什么,这是一个无用的转换,因此我不想这样做。那么你的问题是什么??什么问题是你试图解决但无法解决的?您想对结果做什么?转换为列表是什么意思?现在,您似乎假设它返回一个浮点值。你只想得到一个浮点数的列表吗?正如我所说的“我的示例代码目前将PyObject*结果转换为double,但我想将其转换为列表”。当我要求澄清你的问题时,我并不是想让你直接引用我要求澄清的部分。将一个双精度转换成一个列表对你意味着什么?没什么,这是一个无用的转换,因此我不想这样做。那么你的问题是什么??什么问题是你试图解决但无法解决的?您想如何处理结果
?