用C语音编写python的扩展模块,也就是python调c库
1.用C语言扩展Python的功能:
http://www.ibm.com/developerworks/cn/linux/l-pythc/
2.用C语言编写Python扩展模块:
http://hi.baidu.com/jinmu190/blog/item/c5475846eee39c056a63e5f1.html
http://blog.csdn.net/dengxu11/article/details/7393395
http://www.cnblogs.com/phinecos/archive/2010/05/23/1742344.html
我们知道python是一种很好的胶水语言,现在有个问题,如何让python 调用到c程序,
假如c程序已经是成熟的code.
方式有3种:
1.直接调用动态库
2.通过SWIG接口
前面2中方式参考: http://www.2cto.com/kf/201009/74906.html
3.为调用者python 写一个c的扩展包
需求:有一个POC的项目,需要在openstack的 源码里面加入我们自己的控制逻辑.openstack是
python 写的,我们自己的控制逻辑是个成熟的code,(大量的so), 我们需要在python code中调用
c code. 我们采用 方式3 为python写一个 扩展包,然后在python中调用 c code
例子:为say.c 编写一个 符合python 标准的扩展包
a. say.h 已经存在,里面有2个函数定义 sayhello, saybye
b. say.c 已经存在,里面实现了 say.h 中定义的方法
c. sayModule.c 是为 python 调用者写的 一个扩展包,最终会使用 distutils 编译成say.so
d. setUp.py,将c code 打包成 so :
[root@egovmo03 C]# python setup.py install
running install
running build
running build_ext
building 'say' extension
creating build
creating build/temp.linux-x86_64-2.4
gcc -pthread -fno-strict-aliasing -DNDEBUG -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fPIC -I/usr/include/python2.4 -c sayModule.c -o build/temp.linux-x86_64-2.4/sayModule.o
gcc -pthread -fno-strict-aliasing -DNDEBUG -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fPIC -I/usr/include/python2.4 -c say.c -o build/temp.linux-x86_64-2.4/say.o
creating build/lib.linux-x86_64-2.4
gcc -pthread -shared build/temp.linux-x86_64-2.4/sayModule.o build/temp.linux-x86_64-2.4/say.o -o build/lib.linux-x86_64-2.4/say.so
running install_lib
copying build/lib.linux-x86_64-2.4/say.so -> /usr/lib64/python2.4/site-packages
[root@egovmo03 C]#
测试:
[root@egovmo03 C]# python
Python 2.4.3 (#1, Jun 11 2009, 14:09:37)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-44)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import say
>>> dir(say)
['__doc__', '__file__', '__name__', 'bye', 'error', 'hello', 'say'] ->>> say 模块多了 hello 和 bye方法
>>> aa='xpxp'
>>> say.hello(aa);
hello, xpxp
>>> say.bye(aa);
bye, xpxp
>>>
用C语音编写python的扩展模块,也就是python调c库的更多相关文章
- 《编写高质量代码:改善Python程序的91个建议》读后感
编写高质量代码:改善Python程序的91个建议 http://book.douban.com/subject/25910544/ 1.(建议16)is 用于判断两个对象的id是否相等,==才是判断 ...
- 【转】linux和windows下安装python集成开发环境及其python包
本系列分为两篇: 1.[转]windows和linux中搭建python集成开发环境IDE 2.[转]linux和windows下安装python集成开发环境及其python包 3.windows和l ...
- Python深入:Distutils发布Python模块--转载
https://blog.csdn.net/gqtcgq/article/details/49255995 Distutils可以用来在Python环境中构建和安装额外的模块.新的模块可以是纯Pyth ...
- 孤荷凌寒自学python第二十四天python类中隐藏的私有方法探秘
孤荷凌寒自学python第二十四天python类中隐藏的私有方法探秘 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 今天发现了python的类中隐藏着一些特殊的私有方法. 这些私有方法不管我 ...
- (转)4年python,总结一些改善Python程序的建议
自己写Python也有四五年了,一直是用自己的"强迫症"在维持自己代码的质量.都有去看Google的Python代码规范,对这几年的工作经验,做个简单的笔记,如果你也在学pythp ...
- Python深入:Distutils发布Python模块
Distutils可以用来在Python环境中构建和安装额外的模块.新的模块可以是纯Python的,也可以是用C/C++写的扩展模块,或者可以是Python包,包中包含了由C和Python编写的模块. ...
- 从零开始学Python第0周:Python基本介绍(部分内容来源于网络)
Python入门介绍 一,Python的基本介绍 (1)概要 Python是一种解释型,面向对象,动态数据类型的高级程序设计语言.常被广泛用于处理系统管理任务和web编程.现如今Python已经成为了 ...
- python grammar、C/C++ Python Parsing Engine
catalog . Python语言简介 . Python模块 . 嵌入式Python解析引擎: C++调用Python . Python 调用 C (base) . 扩展Python语法解析器功能: ...
- python公司面试题集锦 python面试题大全
问题一:以下的代码的输出将是什么? 说出你的答案并解释. class Parent(object): x = 1 class Child1(Parent): pass class Child2(Par ...
随机推荐
- fedora14 - 22安装yum源的最终所有唯一文档
yum的配置包括3个地方 /etc/yum中主要是yum的插件: /etc/yum/pluginconf.d 目录下配置yum的插件的启用或禁用等... /etc/yum.conf这个是yum的主要配 ...
- 如何使用Jetbrains Clion 在一个工程里 编译单个C++源文件 (实现一键编译且运行)
这篇文章主要在下面这篇文章的基础上,先是实现了一键编译和一键运行两个单个功能,最后又进一步使用Clion自带的Custom Build Application实现编译且运行一键实现. https:// ...
- Django学习之Cookie和Session
一.Cookie 1.Cookie的由来 2.什么是Cookie 3.Cookie的原理 4.查看Cookie 二.Django中操作Cookie 1.获取Cookie 2.设置Cookie 3.删除 ...
- Visual Studio Code - 插件
Intellisense(代码提示.智能感应) Path Intellisense:路径别名(alias)代码提示 例如:在模块打包配置中配置@代替了src,可以使用下面的配置让@智能感应 " ...
- Python Module_oslo.vmware_连接 vCenter
目录 目录 前言 Install oslsvmware How to use the vSphere Web Service SDK 前言 oslo.vmware 是一个由 Python 实现的 vC ...
- EncodeError: 'latin-1' codec can't encode characters in position 69-70: ordinal not in range(256)
UnicodeEncodeError: 'latin-1' codec can't encode characters in position 69-70: ordinal not in range( ...
- 【命令汇总】Windows 应急响应
日期:2019-06-07 16:11:49 作者:Bay0net 介绍:Windows 应急响应.取证及溯源相关内容学习记录 0x00.前言 常见的应急分类: web入侵:网页挂马.主页篡改.Web ...
- 中国MOOC_零基础学Java语言_期末考试的编程题_1二进制的前导的零
期末考试的编程题 返回 这是期末考试的编程题,在60分钟内,你可以多次提交,直到正确为止. 温馨提示: 1.本次考试属于Online Judge题目,提交后由系统即时判分. 2.学生可以在考试截止 ...
- Spring MVC的RequestContextHolder使用误区
JShop简介:jshop是一套使用Java语言开发的B2C网店系统,致力于为个人和中小企业提供免费.好用的网店系统. 项目主页:http://git.oschina.net/dinguangx/js ...
- 更新代码 出现 You need to upgrade the working copy first 错误
今天更新了Eclipse的subclipse插件,更新代码报如下错误: svn: The working copy at 'E:\591woospace\kst_fashion_alipay_v1.2 ...