python怎么用c函数 python怎么调用c语言

python 怎么调用c语言接口ctypes:可直接调用c语言动态链接库 。
【python怎么用c函数 python怎么调用c语言】使用步骤:
1 编译好自己的动态连接库
2 利用ctypes载入动态连接库
3 用ctype调用C函数接口时,需要将python变量类型做转换后才能作为函数参数,转换原则见下图:
4 Python若想获取ctypes调用的C函数返回值,需要先指定返回值类型 。我们将在接下来的完整Sample中看到如何使用 。
#Step 1:test.c#include stdio.h
int add(int a, int b)
{
return ab;
}#Step 2: 编译动态链接库 ( 如何编译动态链接库在本文不详解 , 网上资料一大堆 。)gcc -fPIC -shared test.c -o libtest.so
#Step 3:test.py
from ctypes import *mylib = CDLL("libtest.so")或者cdll.LoadLibrary("libtest.so")add = mylib.add
add.argtypes = [c_int, c_int] # 参数类型,两个int(c_int是ctypes类型,见上表)
add.restype = c_int # 返回值类型,int (c_int 是ctypes类型,见上表)
sum = add(3, 6)
怎样把Python代码嵌入到C程序步骤1:安装Python开发包
由于需要访问Python/C API,首先安装Python开发包 。
在Debian,Ubuntu或Linux Mint中:
在CentOS,Fedora或RHEL中:
安装成功后 , Python头文件在/usr/include/python2.7 。根据Linux发行版的不同,确切的路径可能是不相同的 。例如,CentOS 6中是/usr/include/python2.6 。
步骤2:初始化解释器并设置路径
C中嵌入Python的第一步是初始化Python解释器 , 这可以用以下C函数完成 。
初始化解释器后,需要设置你的C程序中要导入的Python模块的路径 。例如,比如你的Python模块位于/usr/local/modules 。然后使用以下C函数调用来设置路径 。
步骤3:数据转换
C中嵌入Python最重要的方面之一是数据转换 。从C中传递数据到Python函数,需要首先将数据从C数据类型转换到Python数据类型 。Python/C API提供各种函数来实现这 。例如,转换C字符串到Python字符串,使用PyString_FromString函数 。
另外一个类似函数PyInt_FromLong,将C中long数据类型转换为Python int 。每个Python/C API函数返回一个PyObject类型的引用 。
步骤4:定义一个Python模块
当你想嵌入Python代码到另一种语言如C,该代码需要被写成Python模块,然后用另一种语言“导入” 。所以让我们来看看如何在C中导入Python模块 。
为了进行说明 , 我们实现一个简单的Python模块例子如下:
以上的Python函数有一个字符串作为参数并返回两个重复的字符串 。例如,如果输入字符串是“cyberpersons”,该函数返回'cyberpersonscyberpersons' 。此模块文件命名为“printData.py”并将它放在前面声明的Python模块目录中(/usr/local/modules) 。
步骤5:加载一个Python模块
现在你已经定义了Python模块,是时候在C程序中加载它了 。导入模块的C代码看起来像这样:
步骤6:构建函数的参数
当加载一个模块时,可以调用模块中定义的Python函数 。通常 , 我们需要传递一个或多个参数到一个Python函数 。我们必须构建一个Python元组对象,它包括Python函数中的参数 。
在我们的例子中 , printData函数定义带一个参数的模块 。因此,我们构建一个大小是一的Python元组对象如下 。我们可以使用PyTuple_SetItem设置元组对象的每个项 。
我们已经成功构建一个参数传递到函数调用,是时候从C程序调用python函数了 。
步骤7:调用Python函数
一旦成功创建Python元组对象作为函数参数 , 我们可以调用一个带参数的Python函数 。为此 , 通过使用PyObject_GetAttrString首先获得模块中定义的函数的引用 , 然后使用PyObject_CallObject调用该函数 。例如:
步骤8:错误检查
避免运行时错误的常见方法是检查函数的返回值并根据返回值采取适当的行动 。类似于C程序中的全局变量errno,Python/C API提供一个全局指示符,它报告最后发生的错误 。当Python/C API函数失败,全局指示符设置为指示错误,并且PyErr_Print可以用于显示相应的人类可读的trackback 。例如:
在你的应用程序中 , 你可以轻松地将各种错误检查 。
这里是完整的C程序 , 它如本教程描述的嵌入Python代码 。
步骤9:编译和执行
保存以上代码到finalCode.c,并且链接Python库(-lpython2.7)编译该代码 。根据发行版的不同,可能使用不同的版本(例如,-lpython2.6) 。
python使用ctypes调用C编译dll函数方法在函数声明加入前缀,如
__declspec(dllexport) int Fun(int a, int b)
否则在加载该dll时会提示找不到该符号
在windows下可以通过vs自带的dumpbin工具查看可被调用符号
dumpbin /exports test.dll
C函数在调用过程中关于参数传递和压栈由多种规定,作为dll提供给其他程序调用时 , 必须明确并统一为同一种调用规定,否则会导致栈破坏,编译器负责具体实现调用规定 , 主要有以下几种调用规定
python下调用C库有多种方式,ctypes是其中一种比较方便的,调用时首先需要加载dll文件,根据C dll的调用规定不同需要使用不同接口 , 使用ctypes需要 import ctypes 库
对于简单的C函数,例如 int add(int a, int b) , 此时就可以直接调用了,如
对于较复杂的C函数的参数情况,ctypes调用时对入参和出餐做一定处理,这里分情况讨论
以上包含了几种主要的参数传递情况,ctypes也提供了一个较为完整的python类型和C类型的对照,如下:
python怎么调用c的main函数if
__name__=="__main__":
print
'main'
当脚本作为执行脚本时__name__python怎么用c函数的值为__main__当脚本作为模块时__name__为模块文件名 。举个例子 , a.py作为执行脚本时__name__python怎么用c函数的值是__main__ 。有2个脚本,a.py和b.py , a中引入b,执行a.py时,在b中模块python怎么用c函数的__name__就是b.py
python怎样嵌入c用c语言编写一个动态库python怎么用c函数,提供两个函数python怎么用c函数,两个数python怎么用c函数的整形求和,两个浮点数python怎么用c函数的求和 。取名为mylib.c 。
将c函数文件编译成so动态库 。运行gcc mylib.c-fPIC -shared -o libtest.so命令,在目录下可以看到生成的库文件libtest.so 。
Python调用so库文件 。首先导入ctypes,其次用CDLL加载so文件,最后调用对应的函数 。将python代码保存到pydemo.py中 。
执行python pydemo.py查看运行结果 。
众多python培训视频 , 尽在python学习网,欢迎在线学习python怎么用c函数!
python怎么用c函数的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于python怎么调用c语言、python怎么用c函数的信息别忘了在本站进行查找喔 。

    推荐阅读