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 ;
}
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调用
[root@typhoeus79 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()
[root@typhoeus79 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://chimera.labs.oreilly.com/books/1230000000393/ch15.html#_solution_240
http://wangrqa.blog.163.com/blog/static/170946827201010309510247/
http://csl.name/C-functions-from-Python/
http://mypyg.iteye.com/blog/845915
python调用c代码的更多相关文章
- Python调用Java代码部署及初步使用
Python调用Java代码部署: jpype下载地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/#jpype 下载的时候需要使用Chrome浏览器进行下载 ...
- 如何实现Python调用C代码--python与C之间如何通信(swig)
转载: https://www.zhihu.com/question/23003213 1. C代码如何调用Python 1.1 test #include <Python.h> int ...
- python 调用 java代码
一.JPype简述 1.JPype是什么? JPype是一个能够让 python 代码方便地调用 Java 代码的工具,从而克服了 python 在某些领域(如服务器端编程)中的不足. 2.JPype ...
- python调用Go代码
Go 1.5发布了,其中包含了一个特性:可以编译生成动态链接库,经试验,生成的.so文件可以被python加载并调用.下面举个例子: 先写一个go文件main.go: package main imp ...
- 转python调用Go代码
Go 1.5发布了,其中包含了一个特性:可以编译生成动态链接库,经试验,生成的.so文件可以被python加载并调用.下面举个例子: 先写一个go文件main.go: package main imp ...
- python调用Java代码,完毕JBPM工作流application
1.缘由 有一庞大Python django webproject,要引入工作流引擎,像OA一样.方便的流程控制与管理.Python或django关于工作流的开源插件,稀少,并且弱爆了,终于选用jav ...
- python调用c代码2
1.生成动态链接库 [root@typhoeus79 c]# more head.c #include <stdio.h> #include <stdlib.h> typede ...
- python调用java代码 java虚拟机(jvm)
1.新建com文件夹,在里面新建 fibnq.java package com; public class fibnq { public fibnq(){} public int fb(int n){ ...
- python 调用js代码
Python2 安装pyv8 pip install-egit://github.com/brokenseal/PyV8-OS-X#egg=pyv8 from pyv8 import PyV8 c ...
随机推荐
- ZOJ2334 Monkey King 并查集 STL
题意:两家原始人(猴)打交道后成为一家猴,打交道时两家分别派出最帅的两位猴子,颜值各自减半,问每次打交道后新家族最帅的猴子的颜值.当然,已经是一家子就没有必要打交道了,因为没有猴希望颜值降低,毕竟还得 ...
- SqlServer和Oracle中一些常用的sql语句3 行列转换
--217, SQL SERVER SELECT Cust_Name , MAX(CASE WHEN Order_Date ='2009-08-01' THEN AR END) "2009- ...
- GPUImage库的使用
GPUImage开源项目地址:https://github.com/BradLarson/GPUImage GPUImage使用说明:https://github.com/BradLarson/GPU ...
- win10 uwp 九幽图床
本文主要是图片加水印自动上传,代码已经上传github. 图片加水印,我的方法,简单,一个好的方法是毒逆天大神的图片加水印方法或http://daily.zhihu.com/story/8812028 ...
- socket__服务端、客户端(注释版)
# !/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2017/8/22 16:14 # @Author : Mr_zhang # @Sit ...
- mysql批量更新数据,即:循环select记录然后更新某一字段
原因: 今天遇到一个问题:一个数据表case_folder_info想要实现自定义排序功能,就在表里新加了一个字段SORT_NUMBER,由于表里存在已有数据,所以这个SORT_NUMBER字段都为空 ...
- oracle导不出空表的解决办法
1.先进行表分析(一定要执行此步,否则查询空表可能不准确) select 'analyze table '||table_name||' compute statistics;' from user_ ...
- Python 3 使用venv创建虚拟环境
Python 3.3以上使用venv来代替了原来Python2使用的virtualenv创建虚拟环境. 虚拟环境的作用是使得不同项目的Python包之间不会相互干扰,避免了由此产生的各种问题. 现在演 ...
- ALV添加文字输入框
一.业务场景 在合同打印中,需要临时添加其他约定事项,在打印程序的ALV中添加其他事项字段,点击之后弹出文字输入窗口,点击确定,文字内容存表,并在ALV中展示,点击打印后,文字内容加载到smartfo ...
- javascript 之作用域-06
作用域 作用域是指变量和函数可访问范围,他规定了如何查找变量,也就是确定当前执行代码对变量的访问权限. 作用域有两种工作模式: 静态作用域 :又称为词法作用域,在编译阶就可以决定变量的引用,由程序定义 ...