我有一个c++映射,需要发送到python脚本进行处理。我想我应该把它放进皮迪克特然后再寄出去。问题是我的脚本没有正确接收它
我的c++
#include <Python.h>
#include <string>
int main(int argc, char *argv[]) {
Py_Initialize();
PyObject *import, *attr, *instance, *methodcall, *arg, *tuple;
PySys_SetPath("./py/");
import = PyImport_ImportModule("class_test");
attr = PyObject_GetAttrString(import, "TestMap");
arg = PyString_FromString("arg from first");
tuple = PyTuple_Pack(1, arg);
instance = PyInstance_New(attr, tuple, NULL);
PyObject *d = PyDict_New();
PyDict_SetItemString(d, "k", PyInt_FromLong(3000)) ? printf("seting item failed\n") : printf("seting item succeeded\n");
methodcall = PyObject_CallMethod(instance, "hello", "s", d);
Py_DECREF(instance);
Py_Finalize();
return 0;
}
还有我的简单脚本
^{pr2}$输出是
seting item succeeded
From python script
☺
因此,与其打印字典,不如打印一张笑脸
如果您能给出一个使用默认python API(使用python.h)而不是任何其他库的答案,我将不胜感激
使用
"s"
你告诉它参数是一个char*
,但实际上它是一个字典(aPyObject*
)。如果使用"O"
,它将被正确解释为PyObject*
。PyObject_CallMethod
的格式字符串被解释为Py_BuildValue
,因此记录了here。在笑脸只是对dict记忆中的字符串的重新解释。在
除此之外,您还应该检查Python API函数的返回值(
NULL
通常表示错误),并且看起来有一些PyObject
你从未减少过,因此您正在泄漏内存。在相关问题 更多 >
编程相关推荐