日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python自动控制程序_巧用 python 脚本控制你的C程序

發(fā)布時間:2025/3/15 python 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python自动控制程序_巧用 python 脚本控制你的C程序 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

python是一門藝術語言,除了開發(fā)桌面程序,還能夠開發(fā)網(wǎng)絡應用,數(shù)據(jù)庫應用,還可以代替shell編寫一些的實用腳本,本文主要講述了如何利用 python 程序控制你的 C 程序的行為。

作為例子,本文將用 python 和 C 語言來編寫示例代碼,同時也會順便介紹一下 利用 C 語言擴展 python的方法,最后會給出完整的 C 編寫 python 模塊的源碼。

首先考慮以下應用:假設你需要在項目中實現(xiàn)字符串排序比較的功能,但是事先并不確定應該如何排序(再次假設一下,如果某字符串中如果出現(xiàn)了 “aaa”, "bbb" 這樣的子串,就將該字符串排在靠后的位置),此時如果用 C 語言實現(xiàn)了預定義的排序功能,那么萬一某天需要改變字符串排序行為,就必須重新編寫 C 程序的實現(xiàn),并且再次編譯項目,這樣會浪費大量的精力,相反,如果將字符串排序的功能用 python 代碼控制,即如何排序由python程序定義,這樣將大大提高程序的靈活性。

以下就是示例程序,程序由 python 腳本和 C 編譯的 python 模塊組成,python 實現(xiàn)字符串比較功能,為了簡化期間,本文只是先兩個字符串大小的比較(用于說明 python控制程序行為已經(jīng)足夠),程序采用回調(diào)函數(shù)實現(xiàn),完整代碼如下:

python模塊:

/** =====================================================================================

*

* Filename: ext.c

*

* Description:

*

* Version: 0.1.0

* Created: 09/16/2011 05:44:40 PM

* Revision: r1

* Compiler: gcc

*

* Author: Fu Haiping

* Company: ICT

*

* =====================================================================================*/#includestaticPyObject*my_callback=NULL;staticPyObject*_set_callback(PyObject*self, PyObject*args)

{

PyObject*result=NULL;

PyObject*temp;if(PyArg_ParseTuple(args,"O",&temp)) {if(!PyCallable_Check(temp)) {

PyErr_SetString(PyExc_TypeError,"parameter must be callable");returnNULL;

}

Py_XINCREF(temp);/*Add a reference to new callback*/Py_XDECREF(my_callback);/*Dispose of previous callback*/my_callback=temp;/*Remember new callback*//*Boilerplate to return "None"*/Py_INCREF(Py_None);

result=Py_None;

}returnresult;

}staticint_compare(constchar*a,constchar*b)

{longret;

PyObject*arglist;

PyObject*result=NULL;

arglist=Py_BuildValue("(ss)", a, b);

result=PyEval_CallObject(my_callback, arglist);

ret=PyInt_AsLong(result);if(result==NULL)return-1;

Py_DECREF(result);returnret;

}voidcompare(constchar*a,constchar*b)

{if(_compare(a, b)>0) {

printf("arg1 is greater than arg2\n");

}elseif(_compare(a, b)<0) {

printf("arg1 is NOT greater than arg2\n");

}else{

printf("arg1 is equal to arg2\n");

}

}staticPyObject*_compare_callback(PyObject*self, PyObject*args)

{constchar*a=NULL,*b=NULL;if(!PyArg_ParseTuple(args,"ss",&a,&b)) {returnNULL;

}

compare(a, b);

Py_INCREF(Py_None);returnPy_None;

}staticPyMethodDef

extMethods[]={

{"setcmp", _set_callback, METH_VARARGS},

{"compare", _compare_callback, METH_VARARGS},

{NULL, NULL}

};voidinitext()

{

Py_InitModule("ext", extMethods);

}

setup.py 文件:

fromdistutils.coreimportsetup, Extension

module1=Extension('ext',

sources=['ext.c'])

setup (name='ext',

version='1.0',

description='This is a demo package',

ext_modules=[module1])

執(zhí)行過程:

$ python

Python2.6.6(r266:84292, Sep152010,15:52:39)

[GCC4.4.5] on linux2

Type"help","copyright","credits"or"license"formore information.>>>importext>>>defcompare(a, b):

...if(a>b):

...return-1...if(a

...return1...if(a==b):

...return0

...>>>setcmp(compare)

Traceback (most recent call last):

File"", line1,inNameError: name'setcmp'isnotdefined>>>ext.setcmp(compare)>>>ext.compare("aaa","bbb")

arg1isgreater than arg2>>>

上述執(zhí)行過程中,我們利用了 pythoon 的 compare函數(shù),該函數(shù)實現(xiàn)字符串的比較,如果 a > b, 返回 -1,a < b, 返回1, a == b, 返回0, 這和我們平常的比較方式相反,所以最后的結(jié)果中我們可以看到比較 "aaa", "bbb" 時,"aaa" 會比 “bbb” 大。

如果使用 python 定義我們常規(guī)的字母排序的比較函數(shù),會看到如下執(zhí)行結(jié)果:

>>>defcompare_ex(a, b):

...if(a>b):

...return1...if(a

...return-1...if(a==b):

...return0

...>>>ext.setcmp(compare_ex)>>>ext.compare("aaa","bbb")

arg1isNOT greater than arg2

此時,"aaa" 就比 "bbb" 小。

結(jié)論,以上只是一個小小的嘗試,python的靈活性遠遠不止如此,Haippy會繼續(xù)探索 python的一些有趣的特性和使用方法,請關注本博客后續(xù)文章。:-)

總結(jié)

以上是生活随笔為你收集整理的python自动控制程序_巧用 python 脚本控制你的C程序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日韩免费视频一区二区视频在线观看 | 国产三级视频在线播放 | 国产精品1区2区3区 在线看黄的网站 | 激情总合网 | 香蕉视频成人在线观看 | youjizz国产精品 | 精品久久BBBBB精品人妻 | 日韩国产欧美一区 | 精品国产一区二区三区久久久蜜月 | 国产深夜视频 | 欧美一区二区三区黄色 | 亚洲成人黄 | 校园春色综合 | 欧美日韩激情 | 亚洲日本精品 | 欧美成人tv | 九九黄色片 | 日色视频 | 99伊人 | 四虎影视网 | 男女涩涩视频 | 乳色吐息免费看 | 久久久久中文字幕亚洲精品 | 欧美日韩在线播放三区四区 | 欧美黄色一级 | 亚洲影院中文字幕 | 一本色综合 | 午夜资源网 | 中文字幕一区二区三区日韩精品 | 成人精品久久久午夜福利 | 黄色一级大片免费看 | 天天躁日日躁aaaa视频 | 欧美中文字幕 | 777视频在线观看 | 好大好爽视频 | 毛片h | 国产女人18毛片水真多18精品 | 禁网站在线观看免费视频 | 青青青草视频在线 | 超碰99热| 国产成人精品久久二区二区 | 老鸭窝久久 | 石原莉奈在线播放 | 日韩成人在线网站 | 日本在线国产 | 嫩草影院永久入口 | 中国国产bdsm紧缚捆绑 | 国产精品白丝喷水在线观看 | 欧美亚洲中文精品字幕 | 名校风暴在线观看免费高清完整 | 日韩99| 久久爱影视 | 国产九九热 | 日韩一区在线播放 | 国产又粗又大又硬 | 亚洲国产一区二区三区a毛片 | proumb性欧美在线观看 | 欧美一区二区三区免费观看 | 少妇精品无码一区二区 | 精品精品视频 | 精品一二三四区 | 五月激情丁香 | 国产成人精品亚洲日本在线观看 | 天天干天天干天天操 | 天天插天天操天天干 | 免费av在线网站 | av免费播放 | 织田真子作品 | 一区二区三区欧美日韩 | 亚洲视频中文字幕 | 天堂精品 | 永久在线视频 | 男生尿隔着内裤呲出来视频 | 精品人妻一区二区三区三区四区 | 91精品区| 日本在线一区 | 国产精品无码久久久久 | 97国产一区| 天堂va蜜桃一区二区三区 | 亚洲欧美第一 | 最好看的日本字幕mv视频大全 | 这里只有精品视频在线观看 | 超碰超碰超碰超碰超碰 | 日韩久久不卡 | 成人在线视频免费 | 怎么可能高潮了就结束漫画 | 色屋视频| 精人妻无码一区二区三区 | 人妻无码一区二区三区久久 | 在线观看日本中文字幕 | 日韩色综合网 | 中文字幕乱码中文乱码b站 国产一区二区三区在线观看视频 | 国产一区二区小说 | 91色漫 | 黄色在线网站 | 色姑娘综合 | 日韩成人黄色 | 久久久久国产精品 | 日本欧美不卡 |