Как перенести C структуру структур в python с помощью cpython - PullRequest
1 голос
/ 10 апреля 2020

Я хочу передать структуру, содержащую структуры, в C в python, используя cpython.

//main.c
#include <Python.h>

struct properties {
  struct position
  double velocity;
}

struct position{
  double rx;
  double ry;
  double rz;
}

struct velocity{
  double vx;
  double vy;
  double vz;
}

void main(int argc, char** argv){
Py_Initialize();
struct properties pr;
position po = &pr.position;
velocity v = &pr.velocity;
_Py_fopen("f.py", "r+");
Py_Finalize();
}
#f.py
#import numpy as np
#pr = properties()
#po = pr.po
#v = pr.v
#poabs = np.abs(po.rx + po.ry + po.rz)

Как я могу манипулировать структурами в файле python?

Единственный способ, который я могу придумать, - это передать каждую переменную по отдельности,

//main.c
...
PyObject* rx = po.rx;
...

записать методы получения для каждой переменной в соответствии с https://docs.python.org/3/extending/embedding.html (1.4.)

//main.c
static PyObject* emb_getrx(PyObject *self, PyObject *rx)
{
    return PyFloat_FromDouble(rx);
}

и встроить каждый метод получения

//main.c
static PyMethodDef EmbMethods[] = {
    {"rx", emb_getrx, double, "Return rx."},
    {NULL, NULL, 0, NULL}
};

static PyModuleDef EmbModule = {
    PyModuleDef_HEAD_INIT, "emb", NULL, -1, EmbMethods,NULL, NULL, NULL, NULL
};

к import

#f.py
import emb

Реальный код содержит гораздо больше структур и переменных. Есть ли более простой способ?

...