我使用Cython在C代码中使用Python函数。我需要从C调用带参数的Python函数,但是当我调用Python函数时,编译器告诉我需要使用PyObject。例如,如果我需要将一个整数传递给Python函数,我必须如何做?
#include <Python.h>
#include "hello.h"
int main (int argc, char **argv)
{
printf ("Initializing Python Runtime...\n");
Py_Initialize ();
inithello();
PyObject *a;
start_app(a);
printf ("Cleanup...\n");
Py_Finalize ();
return 0;
}我正在做这样的事情。start_app是python中的一个带有PyObject参数的函数,我如何初始化PyObject才能在python中使用它?因为现在,当我尝试在python中打印(A)时,
发布于 2019-03-03 00:54:39
我理解您的问题,您有一个名为"hello“的Cython模块,其中包含cdef public函数,这样您就可以从C:
cdef public void start_app(arg):
# do something...你想知道如何通过arg。您有两个选择:
arg的类型定义为C类型(在Cython中):cdef public void start_app(int arg):
这可能是最简单的解决方案-您可以只传递一个C int。
PyObject* arg = PyLong_FromLong(5);//在Python2中,这将是PyInt_FromLong start_app(arg);Py_DECREF(arg);//删除我们对它的引用
请注意,我假设start_app返回void。如果它返回一个Python对象(除非您另有说明,否则它是默认的),您必须检查该PyObject*是否为NULL (如果有错误,则为NULL ),然后处理该PyObject*的引用计数(当您完成它时,将其DECREF)
https://stackoverflow.com/questions/54957718
复制相似问题