10

对于我正在创建的 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?

4

1 回答 1

8

最后我所做的是创建一个列表对象,PyListObject并在该列表中附加一个字典,其中包含我想向 python 用户显示的结构的值。

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

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; 
于 2013-04-05T11:49:36.373 回答