怎样编写python脚本的C扩展模块

转载 2012年03月26日 00:21:36

引用 http://blog.csdn.net/oldsmith/article/details/3628282

/*demo.c   module spam*/

#include <Python.h>
static PyObject * spam_system(PyObject * self,PyObject * args)
{
    char *command;
    int        sts;
    //解析传进来的参数 “s”表示解析为字符串
    if(!PyArg_ParseTuple(args,"s",&command))
        return NULL;
    sts = system(command);
    //Py_BuildValue()是用来Python对象,返回Python*
    return Py_BuildValue("i",sts);
}

static    PyMethodDef    SpamMethods[] = {
    //表格说明
    //列 1 :表示python中函数的名字,这里是system,在python中可以通过spam.system来调用这个函数
    //列 2 :一个函数指针,spam_system,这个函数原型一定是 static PyObject *   fun(PyObject * self,PyObject * args)
    //列 3 :是一个宏(macro),表示函数类型。从C语言的来看,Python中的函数有两种,一种是常用的用tuple来传递参数,
    //    一般是METH_VARARGS表示,一种是dictionary传递参数,叫做keyword parameter,用METH_VARARGS|METH_KEYWORDS
    //    这个两个macro就分别对应这两种函数。两种方式在C语言中对应的函数原型是不一样的。
    //列 4 :是一个doc string,在python可以spam.system.__doc__得到
    {"system",spam_system,METH_VARARGS,"Excute a shell command."},
    {NULL,NULL,0,NULL}    //表格结束

};

//当在Python脚本使用import的时候会调用这个函数,这个是唯一的非静态函数
//名字是 init + module_name,相当于main函数。它的主要任务是通知Python解释器,我们的Spam中有多少个函数
void initspam(void)
{
    //第一参数 表示module名称
    //第二参数 是一个表格
    Py_InitModule("spam",SpamMethods);
}

/*
怎么样把C代码编译成Python可以使用的模块
一:
    直接和Python的源码一起编译。在unix平台下,只要在Modules/Setup.local中加上一行
    spam  spammodule.o
二:
    把C程序编译成为动态链接库。不同平台下对动态链接库的支出方式是不一样,区别很大。幸好,我们有一个distutils
    的package可以帮助我们做这个事情。编写Setup.py的文件,内容如下:
    from distutils.core import setup, Extension
    module1 = Extension(    'spam', sources = ['demo.c'])
    setup (name = 'spam Name',
           version = '1.0',
           description = 'This is a spam package',
           ext_modules = [module1])
    $python setup.py build    #开始编译


*/

用C语言实现python的扩展模块

用C语言实现python的扩展模块 示例1: 1    Example.c int add(int a,int b) {         return a+b; } int sub...
  • hnxymjj
  • hnxymjj
  • 2012年09月14日 21:57
  • 4656

使用VS2010编写Python的C扩展

Python语言的特性具有良好的开发效率,使其在诸多领域备受青睐。然而Python语言执行效率的缺陷,使得他在许多对工程效率要求严格的领域的应用受到了限制。但好在Python具有优秀的扩展性能(常常被...
  • Catalyst_ZX
  • Catalyst_ZX
  • 2015年08月07日 09:13
  • 1030

用C语言扩展Python的功能

Pyton和C分别有着各自的优缺点,用Python开发程序速度快,可靠性高,并且有许多现成模块可供使用,但执行速度相对较慢;C语言则正好相反,其执行速度快,但开发效率低。为了充分利用两种语言各自的优点...
  • liangzhao_jay
  • liangzhao_jay
  • 2015年04月10日 10:20
  • 1324

在python中扩展c语言模块

有一个以前写的c语言代码,我想把它用在python程序中。我先是看了《python基础教程》一书中的方法,书中说可以用swig加python内置distutils模块的方法来实现。我照着书上的步骤试了...
  • l1902090
  • l1902090
  • 2014年08月16日 14:38
  • 1529

使用 C 编写 Lua 模块

ua 作为一种小巧的语言,一般都是嵌入到 C/C++ 中作为扩展语言,但是也可以作为独立的脚本语言使用,并且可以使用 C/C++ 编写扩展模块。在参考资料 [1] 中有怎样用 C/C++ 编写模块的介...
  • linuxheik
  • linuxheik
  • 2016年09月06日 10:33
  • 728

用C编写你自己的php扩展

本文参考:http://blog.csdn.net/taft/article/details/596291 如果你没写过php扩展,又是追求性能的极客,那么这篇文章肯定适合你: 假如你有这样一个ph...
  • ddjohn
  • ddjohn
  • 2015年01月01日 11:47
  • 1967

windows 系统 C语言写PHP简单扩展

PHP是纯C语言写出来的,其实也可以理解为PHP是C语言的接口,我使用PHP就是使用了C语言的接口,我们完全可以用C写PHP的扩展,准备工作,PHP分为VC6/VC9/VC11,高版本的C语言需要VC...
  • gaoxuaiguoyi
  • gaoxuaiguoyi
  • 2016年05月24日 13:04
  • 732

C++编写nodejs扩展实战

C++编写nodejs扩展实战 之前有用PHP写过根据IP地址查询IP归属地,后来改用C语言编写,效率果然大幅度提高,然后转化为PHP的扩展. 想起之前有过使用手机号码查询号码归属地,最近又有在研...
  • jiaxiang521521
  • jiaxiang521521
  • 2014年05月22日 20:31
  • 1364

python自己编写模块

python自己编写模块        摘要:我们在学习Python的过程中,经常会有重复的代码,或者项目工程过大,这个时候我们把一些代码写成模块的形式调用时很方便的,同时学会怎么编写模块,也有助于...
  • xz1308579340
  • xz1308579340
  • 2017年03月31日 10:29
  • 3300

Python扩展实现方法--Python与c混合编程

http://www.cnblogs.com/btchenguang/archive/2012/09/04/2670849.html
  • wang15061955806
  • wang15061955806
  • 2016年12月17日 16:04
  • 1893
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:怎样编写python脚本的C扩展模块
举报原因:
原因补充:

(最多只允许输入30个字)