10

For a python module I'm creating, I want to pass to the python user an array of structs like this:

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

I thought that Py_BuildValues was the function I was looking for. But seems like it isn't. Looking in the Python documentation I found the Buffer Protocol. But is the first time I'm developing a python module and the official documentation didn't help me much.

Is the Buffer Protocol the best solution for my problem? If so, How could I return my array from C to python?

2

1 Answer 1

8

Finnally what I did was make a list Object with PyListObject and append to that list a dictionary with the values of the struct that I want to show to the python user.

Hope this will help someone with the same doubt, here is the code:

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; 
Sign up to request clarification or add additional context in comments.

3 Comments

Did you have a solution to send entire structure not just a particular filed ?
No I haven't. But I think if you want to return the entire dict, maybe return (PyObject *) dict; may work. Sorry but I do not have the code to prove it.
Yeah the official docs suck for this. But this is just what I was looking for thanks!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.