返回PY類型字符串
PyString_FromString
加載模塊
PyImport_Import
*************************
C++向Python傳參數(shù)是以元組(tuple)的方式傳過(guò)去的
pArgs?=?PyTuple_New(1);
PyTuple_SetItem(pArgs,?0,?PyInt_FromLong(a));
或者
pArgs=Py_BuildValue("(i)",?a);
************************************************
調(diào)用PY函數(shù)
PyObject_CallObject
獲取PY屬性或函數(shù)
PyObject_GetAttrString
常用的Python/C?API介紹
下面是例子中用到的幾個(gè)Python/C?API的簡(jiǎn)要介紹及示例代碼。注意,這并不是這些函數(shù)的詳細(xì)介紹,而僅僅是我們所用到的功能簡(jiǎn)介,更詳細(xì)內(nèi)容請(qǐng)參考文檔[1]、[2]、[3]、[4]。
打開(kāi)Microsoft?Visual?Studio?.NET?2003,新建一個(gè)控制臺(tái)程序,#include,并在main函數(shù)里加入示例代碼。
//先定義一些變量
char?*cstr;
PyObject?*pstr,?*pmod,?*pdict;
PyObject?*pfunc,?*pargs;
1.?void?Py_Initialize(?)?
初始化Python解釋器,在C++程序中使用其它Python/C?API之前,必須調(diào)用此函數(shù),如果調(diào)用失敗,將產(chǎn)生一個(gè)致命的錯(cuò)誤。例:
Py_Initialize();
2.?int?PyRun_SimpleString(?const?char?*command)
執(zhí)行一段Python代碼,就好象是在__main__?函數(shù)里面執(zhí)行一樣。例:
PyRun_SimpleString("from?time?import?time,ctimen"
"print?''Today?is'',ctime(time())n");
3.?PyObject*?PyImport_ImportModule(?char?*name)
導(dǎo)入一個(gè)Python模塊,參數(shù)name可以是*.py文件的文件名。相當(dāng)于Python內(nèi)建函數(shù)__import__()。例:
pmod?=?PyImport_ImportModule("mymod");?//mymod.py
4.?PyObject*?PyModule_GetDict(?PyObject?*module)?
相當(dāng)于Python模塊對(duì)象的__dict__?屬性,得到模塊名稱空間下的字典對(duì)象。例:
pdict?=?PyModule_GetDict(pmod);
5.?PyObject*?PyRun_String(?const?char?*str,?int?start,?PyObject?*globals,?PyObject?*locals)
執(zhí)行一段Python代碼。
pstr?=?PyRun_String("message",?Py_eval_input,?pdict,?pdict);
6.?int?PyArg_Parse(?PyObject?*args,?char?*format,?...)
解構(gòu)Python數(shù)據(jù)為C的類型,這樣C程序中才可以使用Python里的數(shù)據(jù)。例:
/*?convert?to?C?and?print?it*/
PyArg_Parse(pstr,?"s",?&cstr);
printf("%sn",?cstr);
7.?PyObject*?PyObject_GetAttrString(?PyObject?*o,?char?*attr_name)
返回模塊對(duì)象o中的attr_name?屬性或函數(shù),相當(dāng)于Python中表達(dá)式語(yǔ)句:o.attr_name。例:
/*?to?call?mymod.transform(mymod.message)?*/
pfunc?=?PyObject_GetAttrString(pmod,?"transform");
8.?PyObject*?Py_BuildValue(?char?*format,?...)
構(gòu)建一個(gè)參數(shù)列表,把C類型轉(zhuǎn)換為Python對(duì)象,使Python可以使用C類型數(shù)據(jù),例:
cstr="this?is?hjs''s?test,?to?uppercase";
pargs?=?Py_BuildValue("(s)",?cstr);
9.?PyEval_CallObject(PyObject*?pfunc,?PyObject*?pargs)
此函數(shù)有兩個(gè)參數(shù),都指向Python對(duì)象指針,pfunc是要調(diào)用的Python?函數(shù),通??捎肞yObject_GetAttrString()獲得;pargs是函數(shù)的參數(shù)列表,通??捎肞y_BuildValue()構(gòu)建。例:
pstr?=?PyEval_CallObject(pfunc,?pargs);
PyArg_Parse(pstr,?"s",?&cstr);
printf("%sn",?cstr);
10.?void?Py_Finalize(?)?
關(guān)閉Python解釋器,釋放解釋器所占用的資源。例:
Py_Finalize();