#include #include #include double* parse(int sze, double(*wss)[3]) { Py_ssize_t len = sze; Py_ssize_t len2 = sizeof(wss[0])/sizeof(wss[0][0]); PyObject *pName, *pModule, *pDict, *pFunc; PyObject *pArgs, *pValue; Real* res=malloc(sizeof(double)*sze); char *argv[3]={"parse","Rough","WallRough"}; dlopen("libpython3.so", RTLD_LAZY | RTLD_GLOBAL); Py_Initialize(); Py_Initialize(); PyRun_SimpleString("import sys\n"); PyObject *sys = PyImport_ImportModule("sys"); PyObject *path = PyObject_GetAttrString(sys, "path"); PyList_Append(path, PyBytes_FromString("")); PyRun_SimpleString("print (sys.path)"); Py_DECREF(path); Py_DECREF(sys); pName = PyUnicode_DecodeFSDefault(argv[1]); /* Error checking of pName left out */ pModule = PyImport_Import(pName); Py_DECREF(pName); if (pModule != NULL) { pFunc = PyObject_GetAttrString(pModule, argv[2]); /* pFunc is a new reference */ if (pFunc && PyCallable_Check(pFunc)) { PyObject *result = PyTuple_New(len); if(!PyTuple_Check(result)){ printf("Cannot create list"); Py_DECREF(result); } Py_ssize_t i,j; for (i = 0; i < len; i++) { PyObject *item = PyTuple_New(len2); if(!PyTuple_Check(item)){ printf("Cannot create sublist"); Py_DECREF(item); } for (j = 0; j < len2; j++){ PyTuple_SET_ITEM(item, j, PyFloat_FromDouble(wss[i][j])); } PyTuple_SET_ITEM(result, i, item); } pValue = PyObject_CallObject(pFunc, result); Py_DECREF(result); if (pValue != NULL) { for (i=0;i