如何从C++;巨蟒 我有一个C++映射,我需要发送到Python脚本进行处理。我想我应该把它放在PyDict里然后寄出去。问题是我的脚本没有正确接收它
我的c++如何从C++;巨蟒 我有一个C++映射,我需要发送到Python脚本进行处理。我想我应该把它放在PyDict里然后寄出去。问题是我的脚本没有正确接收它,python,c++,Python,C++,我的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");
#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;
}
输出是
seting item succeeded
From python script
☺
因此,与其打印类似于{“k”:3000}
之类的词典,不如打印一张笑脸
我非常希望您能使用默认的python API(使用python.h)而不是任何其他库来回答我的问题
methodcall = PyObject_CallMethod(instance, "hello", "s", d);
使用“s”
可以告诉它参数是一个char*
,但它实际上是一个字典(一个PyObject*
)。如果使用“O”
,它将被正确解释为PyObject*
。PyObject\u CallMethod
的格式字符串按照Py\u BuildValue
进行解释,并记录在案
笑脸只是把字典记忆中的任何东西重新解释为一根弦
除此之外,您应该检查pythonapi函数的返回值(
NULL
通常表示错误),并且似乎存在一些您从未减少的PyObject
s,因此您正在泄漏内存
methodcall = PyObject_CallMethod(instance, "hello", "s", d);