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

对于我正在创建的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是我正在寻找的function。 但似乎不是。 查看Python文档,我找到了缓冲协议 。 但这是我第一次开发python模块,官方文档对我没什么帮助。

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

最后我做的是使用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;