1.3 回到例子
回到我們的例子函式中,現在,你應該能夠理解下面這些語句:
if (!pyarg_parsetuple(args, "s", &command))
return null;
根據是否由
pyarg_parsetuple()函式設定了異常,如果在引數列表中檢測到錯誤(異常被設定), 則函式返回
null(函式返回物件指標的錯誤標識)。否則,引數的字串值已經被拷貝到本地變數
command中了。這是乙個分配的指標,你不應修改指標指向的字串 (就象在標準c中,變數
command應該正確地宣告為"
const char *command ")。
下面的語句呼叫了unix函式system(),傳遞給函式我們從pyarg_parsetuple() 得到的字串
sts = system(command);
我們的spam.system()
函式必須把
sts的值作為python物件返回。這可以通過
py_buildvalue()
函式實現, 此函式有點象
pyarg_parsetuple()
函式的反函式,這個函式帶乙個格式化字串和任意個c值,並且返回乙個python物件。
py_buildvalue()
函式的詳細資訊後面給出。
return py_buildvalue("i", sts);
void
),相應的python函式必須返回none
。你應習慣這麼做(由py_return_none巨集實現):
py_incref(py_none);
return py_none;
py_none是python空物件的c名稱。這是乙個典型的python物件而不只是乙個
null 指標,正如我們已經看到的,在大多數情況下,py_none表示錯誤。
擴充套件和嵌入python直譯器 摘要
python是一種解釋型,物件導向的程式語言。本文描述如何使用c或c 編寫新模組來擴充套件python直譯器。擴充套件模組能夠定義新的函式也可以定義新的物件型別及其方法。本文也描述了如何將python直譯器作為一種擴充套件語言嵌入到另乙個應用程式中。最後,本文演示了如何編譯和連線擴充套件模組,使擴充...
《擴充套件和嵌入python直譯器》1 9 構造任意值
1.9 構造任意值 py buildvalue 函式和pyarg parsetuple 相同,宣告如下 pyobject py buildvalue char format,py buildvalue 函式和pyarg parsetuple 函式類似,識別一系列格式化單元,但引數 作為輸入引數,而不...
python擴充套件和嵌入
由於python說解釋性的指令碼語言,執行速度較慢。在某些需要提高指令碼執行效率的情況下,可以考慮擴充套件python,用c c 來完成對效率要求高的部分。另外,由於python功能強大,完全可以嵌入到c c 中,以簡化程式,減少 python提供了支援c c 介面,可以方便的使用c c 來擴充套件...