Python C API如何将结构数组从C传递给Python

时间:2013-04-03 11:48:16

标签: python c python-c-api

对于我正在创建的python模块,我想向python用户传递一个这样的结构数组:

struct tcpstat
{
    inet_prefix local;
    inet_prefix remote;
    int     lport;
    int     rport;
    int     state;
    int     rq, wq;
    int     timer;
    int     timeout;
    int     retrs;
    unsigned    ino;
    int     probes;
    unsigned    uid;
    int     refcnt;
    unsigned long long sk;
    int     rto, ato, qack, cwnd, ssthresh;
};

我认为Py_BuildValues是我正在寻找的功能。但似乎不是。查看Python文档,我找到了Buffer Protocol。但这是我第一次开发python模块,官方文档对我没什么帮助。

缓冲协议是我问题的最佳解决方案吗?如果是这样,我怎么能将我的数组从C返回到python?

1 个答案:

答案 0 :(得分:7)

我最终做的是创建一个带有PyListObject的列表对象,并在该列表中附加一个字典,其中包含我要向python用户显示的struct的值。

希望这会帮助有同样疑问的人,这是代码:

PyObject *dict = NULL;
PyListObject *list;

list = (PyListObject *) Py_BuildValue("[]");

int i = 0;
for (i; i < stats_length; i++) {
    dict = Py_BuildValue("{s:i}", "LPort", stats[i].lport);
    PyList_Append(list, dict);
}

return (PyObject *) list;