PythonC接口代码不打印输出并重新启动Spyder内核

2024-09-27 17:40:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在CentOS 7上使用Anaconda Spyder 3.3.6(Python 3.7)。我想将numpy数组传递给一个C函数,该函数处理输入并返回一个numpy数组作为输出。我从一个简单的实现开始,如下所示

#include <stdio.h>
#include <stdlib.h>
#include "/home/peter/anaconda3/include/python3.7m/Python.h"
#include "numpy/arrayobject.h"

#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION

int CsqueezeSurfaces(PyArrayObject *surfaceVectors, PyArrayObject *dimensions)
{
    printf("This function squeezes the surfaces");

    return 1;
}

static PyObject* squeezeSurfaces(PyObject* self, PyObject* args)
{
    PyArrayObject *surfaceVectors=NULL, *dimensions=NULL;

    if (!PyArg_ParseTuple(args, "i", surfaceVectors, dimensions)){
        PyErr_Print();
        printf("PyArg_ParseTuple error");
        return NULL;
    }

    return Py_BuildValue("i", CsqueezeSurfaces(surfaceVectors, dimensions));
}

static PyMethodDef surfaceMethods[] = {
    {"squeezeSurfaces", squeezeSurfaces, METH_VARARGS, "Squeezes surfaces along normal vectors"},
    {NULL, NULL, 0, NULL}
};

static struct PyModuleDef surfaceModules = {
    PyModuleDef_HEAD_INIT,
    "surfaceModules",
    "Surface function Module",
    -1,
    surfaceMethods
};

PyMODINIT_FUNC PyInit_surfaceModules(void){
    import_array();
    return PyModule_Create(&surfaceModules);
}

Spyder会话运行如下

In [1]: import surfaceModules as sm

In [2]: sm.squeezeSurfaces(1)

In [1]: sm.squeezeSurfaces(1)
Traceback (most recent call last):

  File "<ipython-input-1-a00ba41618ea>", line 1, in <module>
    sm.squeezeSurfaces(1)

NameError: name 'sm' is not defined
In [2]: 

Tags: innumpyreturnincludestatic数组nulldimensions

热门问题