日韩性视频-久久久蜜桃-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)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产日韩欧美一区二区东京热 | 久久影院视频 | 99精品视频免费观看 | 人妻夜夜爽天天爽 | 亚洲日本视频在线观看 | 久久精品资源 | 强辱丰满人妻hd中文字幕 | 亚洲一区色 | 欧美精品18videosex性欧美 | www.天天综合 | 精品一区二区三区免费毛片 | 日韩一区二区精品 | 免费av免费观看 | 日韩高清av在线 | 日韩偷拍一区 | 亚洲激情精品 | 亚洲黄色小说网 | av香港经典三级级 在线 | 中文字幕成人在线观看 | 色八区 | 欧美3p视频 | 日韩在线播放一区二区 | 国产操比视频 | 国产精品无码成人片 | 性史性农村dvd毛片 日韩精品在线视频观看 | 特黄特色大片免费播放器使用方法 | 国产精品入口麻豆九色 | 国产又粗又猛又爽又黄 | 日av中文字幕 | 肥臀熟女一区二区三区 | 日批av | 看全色黄大色黄大片大学生 | 精品黄色 | 四虎影库在线播放 | 久久成人国产精品入口 | 青青青在线观看视频 | 91热久久 | 高潮在线视频 | 一级性生活大片 | 伊人av综合 | 免费91网站 | 国产视频二区三区 | 夜夜嗨一区二区三区 | 农村末发育av片一区二区 | 成人在线免费播放视频 | 国产黄色在线网站 | 四色永久访问 | 免费黄色小视频在线观看 | 欧洲色视频 | 91视频第一页 | 最好看的中文字幕 | 香蕉久久精品日日躁夜夜躁 | 夜夜嗨av一区二区三区四区 | 黄色a级大片 | 中文字幕一区二区三区人妻 | 在线中文字幕日韩 | 福利在线免费观看 | 欧美黑丝少妇 | 亚洲精品视频导航 | 色网站在线看 | 国产无套粉嫩白浆内谢 | 午夜视频在线观看一区二区 | 国产伦乱 | 日本成人一区二区三区 | 久久久77 | 色丁香婷婷综合久久 | 老妇裸体性猛交视频 | 青青草免费在线视频 | 三上悠亚亚洲一区 | 日韩少妇激情 | 黄视频免费看在线 | 精品综合久久 | 九九热精品视频在线播放 | 日本h片在线观看 | 成人午夜在线播放 | 五月婷婷六月婷婷 | 欧美精品自拍视频 | 天堂影音 | 狠狠干干 | 国产精品无套 | 欧美激情网站 | 久久久久久久久久久久久国产 | 粉嫩av一区二区 | 免费在线观看你懂的 | 强迫凌虐淫辱の牝奴在线观看 | 久久久久久久久久国产精品 | 天天综合射 | 黄色一区二区三区四区 | 成人看 | 久久精精品久久久久噜噜 | 欧日韩av | 性欢交69国产精品 | 午夜影视在线观看 | 久草观看视频 | 亚洲午夜国产 | 国产日韩欧美在线观看视频 | 69视频在线观看免费 | 涩涩一区 | 久久久蜜桃一区二区人 |