【发布时间】:2016-03-04 16:46:59
【问题描述】:
我正在尝试从 C++ 代码调用 Python 方法,而我正在调用的方法将文件名作为参数返回一个列表。
我的示例代码当前将方法调用的 PyObject* 结果转换为双精度,但我想将其转换为列表。
#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;
}
我该怎么做呢?我已经看到了创建作为参数传递的列表对象的包装类示例,但我还没有看到将返回值转换为列表的示例。
【问题讨论】:
-
转换为列表是什么意思?现在看起来你假设它返回一个
float。你只想得到那个浮动的列表吗? -
正如我所说“我的示例代码当前将 PyObject* 结果转换为双精度,但我想将其转换为列表”。
-
当我要求澄清你的问题时,我并不是要你逐字引用我要求澄清的部分。将双精度数转换为列表对您意味着什么?
-
没什么,这是一个无用的转换,所以我不想这样做。
-
那么你的问题是什么?您正在尝试解决但无法解决的问题是什么?你想用
result做什么?
标签: python c++ python-c-api