将对象从python脚本传递给c ++

时间:2017-05-23 09:43:15

标签: python c++

我有一个简单的c ++代码,它调用python脚本。我能够将一个对象从python脚本返回到c ++代码,现在的问题是我无法弄清楚如何在我的c ++中读取该对象。

相关的python脚本

class obj():
    def __init__(self):
        self.msg = "hello"
        self.i = 8

class Test():
    def __init__(self, c):
        self.c = c
    def finalize(self):
        t = obj()
        print t.msg, t.i
        return t

相关的c ++

Py_Initialize();

PyObject *import, *attr, *instance, *methodcall, *arg, *tuple;
PySys_SetPath("./py/");
import = PyImport_ImportModule("script");
attr = PyObject_GetAttrString(import, "Test");
arg = PyString_FromString("arg from first");
tuple = PyTuple_Pack(1, arg);
instance = PyInstance_New(attr, tuple, NULL);

methodcall = PyObject_CallMethod(instance, "finalize", NULL);

Py_Finalize();

我非常感谢使用默认python API(使用python.h)而不是任何其他库的答案

1 个答案:

答案 0 :(得分:0)

事实证明这是一个非常简单的代码行here,我需要做的就是用pyObject作为第一个参数和我需要的属性的名称来调用PyObject_GetAttrString作为第二个。

在下面的代码中,我会检查它是否存在,然后打印出来。

PyObject_HasAttrString(methodcall, "msg") ? 
    printf(PyString_AsString(PyObject_GetAttrString(methodcall, "msg"))) :
    printf("ERROR\n");`