C呼叫Python的函式

2021-06-20 05:31:52 字數 2070 閱讀 4042

python是簡單的,python又是強大的。

剛接觸python的人都會有這麼乙個疑問:python到底有什麼用。不過要知道它能做什麼,還得先學會使用它。python的語法相當簡單,這裡有乙個教程:相信你一兩天就能對python輕車熟路。

我的大部分時間都是用c開發的,所以,在c中呼叫python是我比較關心的話題。看了一些網上前輩們的**大致上也有乙個整體的認識。

1. 設定編譯環境,其實就是設定python的標頭檔案和庫檔案目錄

2. 初始化python直譯器:

py_initialize();

3. 呼叫python

4. 釋放資源

py_finalize();

我們重點要說的是第三步,呼叫python。在c中,我們可以直接呼叫python的指令碼,也可以呼叫python中的函式。

1. 直接呼叫python腳步,可以使用函式:pyrun_******string()。

2. 呼叫python中的函式。關鍵問題是c中的型別怎麼傳遞到python中去,為此python提供了這樣的乙個函式:

pyobject* py_buildvalue(const char *format, ...);

pyobject* py_vabuildvalue(const char *format, va_list vargs );

這些函式的具體使用,可以參照python的說明。

這裡我實現了乙個函式來簡單的呼叫python中的函式:

1/*2

module: python腳步的模組名

3function: 要呼叫的函式名

4format: 傳遞給py_vabuildvalue函式的可變引數模板5*/

6int

pycall(

const

char

*module,

const

char

*function,

const

char

*format, ... )717

//查詢函式

18if( !

(pfunc

=pyobject_getattrstring(pmod, function) ) )

2122

//建立引數

23va_list vargs;

24va_start( vargs, format );

25pparm

=py_vabuildvalue( format, vargs );

26va_end(vargs);

2728

//函式呼叫

29pretval

=pyeval_callobject( pfunc, pparm);

3031

//假定返回值為整形

32int

ret;

33pyarg_parse( pretval, "i

", &ret );

34return

ret;35}

3637

intmain(

intargc,

char

*argv)

38)", 2, "name", "linxr", "age", "25" );

46*/

47printf(

"ret = %d\n

", pycall(

"pytest",

"fun

", "()

");48printf(

"ret = %d\n

", pycall(

"pytest",

"fun1",

"(i)

",

12);

49printf(

"ret = %d\n

", pycall(

"pytest",

"fun2",

"(is)",

12, "12

");5051

py_finalize();

5253

return0;

54}

python呼叫C的函式

需要用到ctypes這個庫 官方文件 ctypes是python的乙個外部函式庫,它提供相容c的資料型別,允許呼叫dll或共享庫中的函式。它可以用純python來封裝這些庫 目前在pwn中使用過這個庫 在 guess num 這一題中,需要用棧溢位漏洞將srand的引數修改為自己的 引數,然後呼叫r...

python呼叫C函式

是的,我又開始integrate另乙個方法 此方法用c python作膠水,供matlab呼叫,原來是在linux上編譯執行,我需要把它在windows x64上跑起來 在linux平台,python呼叫c是通過這樣的方式來進行的 var cdll test.so 其中,so是linux上的一種稱為...

python 呼叫c語言函式

雖然python是萬能的,但是對於某些特殊功能,需要c語言才能完成。這樣,就需要用python來呼叫c的 了 具體流程 c編寫相關函式 編譯成庫 然後在python中載入這些庫,指定呼叫函式。這些函式可以char int,float,還能返回指標。以下示例 通過python呼叫c函式,返回 hell...