Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从C++;巨蟒 我有一个C++映射,我需要发送到Python脚本进行处理。我想我应该把它放在PyDict里然后寄出去。问题是我的脚本没有正确接收它_Python_C++ - Fatal编程技术网

如何从C++;巨蟒 我有一个C++映射,我需要发送到Python脚本进行处理。我想我应该把它放在PyDict里然后寄出去。问题是我的脚本没有正确接收它

如何从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");

我的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;
}
输出是

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);