在Python中某些時候需要C做效率上的補充. 在實際應用中,需要做部分資料的互動. Python 可以通用 ctypes 模組很好地調用C. 下面示範了 Python 中調用C一個標準函數. 傳遞一個結構指標入. 得到C中分配記憶體資料 傳遞出. 希望對你的Python 學習有所協助.
1 test.c
#include <stdio.h>
#include <stdlib.h>
typedef struct {
unsigned char words[10];
} keywords;
typedef struct {
keywords *kws;
unsigned int len;
} outStruct;
int test(outStruct *o){
unsigned int i=4;
o->kws = (keywords *)malloc(sizeof(unsigned char)*10*i);
strcpy(o->kws[0].words,"test 1");
strcpy(o->kws[1].words,"test 2");
o->len = i;
return 1;
}
2 編譯
gcc-c
-fPIC-o test.o test.c
gcc-shared test.o-o
test.so
3 test.py
from ctypesimport
*
class keywords(Structure):
_fields_= [
('words', c_char*10),]
class outStruct(Structure):
_fields_= [
('kws', POINTER(keywords)),
('len', c_int),]
libc=CDLL("./test.so")
libc.test.argtypes= [POINTER(outStruct)]
o= outStruct()
ret= libc.test(byref(o))
print o.kws[0].words;
print o.kws[1].words;
print o.len
4 測試結果
b'test 1'
b'test 2'
4