python调用c代码

Linux环境下使用python调用C的printf例子:


#!/usr/bin/env python2.7
#-*- coding:utf-8 -*-
from ctypes import *
def test():
#libc = cdll.LoadLibrary("libc.so.6")
libc = CDLL("libc.so.6")
msg = "hello world!\n"
libc.printf("Testing:%s",msg)
def main():
test()

if __name__ == ‘__main__‘:
main()

python中结构体对应的类型:


#!/usr/bin/env python2.7
#-*- coding:utf-8 -*-
from ctypes import *
class barley_amout(Structure):
_fields_ = [
("barley_long",c_long),
("barley_int",c_int),
("barley_char",c_char*100)
]
def main():
bu = barley_amout(66,44,"Hello world")
print bu.barley_long
print bu.barley_int
print bu.barley_char

if __name__ == ‘__main__‘:
main()

python中Union体对应的类型:


class _U(Union):
_fields_ = [("lptdesc", POINTER(TYPEDESC)),
("lpadesc", POINTER(ARRAYDESC)),
("hreftype", HREFTYPE)]

class TYPEDESC(Structure):
_anonymous_ = ("u",)
_fields_ = [("u", _U),
("vt", VARTYPE)]

调用方式


td = TYPEDESC()
td.vt = VT_PTR
td.lptdesc = POINTER(some_type)
td.u.lptdesc = POINTER(some_type)

生成单个so动态库并通过python调用

1、test.c文件


#include <stdio.h>

void print_helloworld(){
printf("%s","Hello world!\n");
}

int main(){
print_helloworld();
return 0;
}

2、生成动态库文件


gcc -fPIC -c test.c  -o libtest.o

通过这种方式在python调用的时候出现

OSError: ./libtest.o: only ET_DYN and ET_EXEC can be loaded

参照这个博客http://xieruilin.iteye.com/blog/730422

修改方式如下:


gcc -fpic -shared -o libtest.o ./test.c 

3、python调用


[[email protected] 20140509]# more call_test.py
#!/usr/bin/env python2.7
#-*- coding:utf-8 -*-

from ctypes import *
def test():
libc = CDLL("./libtest.o")
libc.print_helloworld()

if __name__ == ‘__main__‘:
test()
[[email protected] 20140509]# ./call_test.py
Hello world!

 参考文献

https://docs.python.org/2/library/ctypes.html?highlight=structure#ctypes.Structure

https://docs.python.org/2.7/library/ctypes.html#module-ctypes

http://wangrqa.blog.163.com/blog/static/170946827201010309510247/

http://csl.name/C-functions-from-Python/

http://mypyg.iteye.com/blog/845915

python调用c代码,布布扣,bubuko.com

时间: 2024-08-10 00:07:13

python调用c代码的相关文章

python调用c代码2

1.生成动态链接库 [[email protected] c]# more head.c #include <stdio.h> #include <stdlib.h> typedef struct _point{ int x; int y; }Point; Point * InitPoint(int x,int y) { Point *p = (Point *)malloc(sizeof(Point)); p->x = x; p->y = y; return p; }

Python调用Java代码部署及初步使用

Python调用Java代码部署: jpype下载地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/#jpype 下载的时候需要使用Chrome浏览器进行下载. 安装顺序: 1.pip install wheel 待wheel安装好以后,再安装已经下载的JPype1-0.6.2-cp36-cp36m-win_amd64.whl 文件 2.pip install JPype1-0.6.2-cp36-cp36m-win_amd64.whl 如果有问题,缺少库

python调用Java代码,完毕JBPM工作流application

1.缘由 有一庞大Python django webproject,要引入工作流引擎,像OA一样.方便的流程控制与管理.Python或django关于工作流的开源插件,稀少,并且弱爆了,终于选用java的开源框架JBPM.为了使Pythonproject整合Java框架,尝试过jbpm-console提供的 REST, 以失败告终,终于选用Python 直接调用Java代码.操作JBPM. 1.1pythonprojectREST与JBPM Workbench交互 失败 REST URL格式 h

python调用Go代码

Go 1.5发布了,其中包含了一个特性:可以编译生成动态链接库,经试验,生成的.so文件可以被python加载并调用.下面举个例子: 先写一个go文件main.go: package main import "C" //export Sum func Sum(a, b int) int { return a + b } func main() {} 然后编译go build -buildmode=c-shared -o sum.so main.go,会得到一个sum.so和一个sum.

python调用java代码 java虚拟机(jvm)

1.新建com文件夹,在里面新建 fibnq.java package com; public class fibnq { public fibnq(){} public int fb(int n){ if(n <2){ return 1; }else { return fb(n-1)+fb(n-2); } } } 2.在com文件夹路径打开cmd,编译fibnq.java javac ./fibnq.java 3.返回上一层目录 cd ../ 4.把fibnq类打包:注意   com要和fib

python 调用js代码

Python2   安装pyv8 pip install-egit://github.com/brokenseal/PyV8-OS-X#egg=pyv8 from pyv8 import PyV8 ctxt = PyV8.JSContext() ctxt.enter() # 创建一个jsContext对象并进入 ctxt.eval(js_str) # 执行js代码 接下来就可以使用这个ctxt来执行js脚本了.主要有两种用途: 1.调用js中的方法: #把strEnc绑定到js中的strEnc方

Python脚本调用C#代码数据交互示例(hello world)

原地址: http://www.djangochina.cn/forum.php?mod=viewthread&tid=247 随着项目的逐渐收尾, 对IronPython脚本也越来越熟悉,这里为IronPython脚本感兴趣但不入门的朋友写几篇使用心得,这是第一个:最简单的hello world程序.        首先,我们必须有一个IronPython脚本引擎库(IronPython.dll),我用的版本是V1.0,你可以在网上直接下到相关源码,编译后即生成IronPython.dll.1

python通过multiprocessing 实现带回调函数的异步调用的代码

下边代码段是关于python通过multiprocessing 实现带回调函数的异步调用的代码. from multiprocessing import Pool def f(x): if __name__ == '__main__': pool = Pool(processes=1) # Start a worker processes. result = pool.apply_async(f, [10], callback) # Evaluate "f(10)" asynchron

python调用接口,python接收post请求接口(附完整代码)

与Scala语言相比,Python有其独特的优势和广泛的应用,python调用接口,因此Spark也推出了PySpark,它在框架上提供了一个使用Python语言的接口,python接收post请求接口为数据科学家使用框架提供了方便. 众所周知,Spark框架主要由Scala语言实现,它还包含少量的Java代码.Spark面向用户的编程接口也是Scala.然而,Python在数据科学领域一直占据着重要的地位.仍然有大量的数据工程师使用各种Python数据处理和科学计算库,如numpy.熊猫.sc