講述C 中呼叫Python指令碼

2021-06-03 23:11:18 字數 2164 閱讀 1582

c++中呼叫python指令碼的意義就不講了,至少你可以把它當成文字形式的動態鏈結庫, 

需要的時候還可以改一改,只要不改變介面, c++的程式一旦編譯好了,再改就沒那麼方便了

先看python的**

**:#test function

def add(a,b):

print "in python function add"

print "a = " + str(a)

print "b = " + str(b)

print "ret = " + str(a+b)

return

def foo(a):

print "in python function foo"

print "a = " + str(a)

print "ret = " + str(a * a)

return

把上面的python**存為pytest.py

接下來是c++ 的**

**:#include "python.h"

int main(int argc, char** argv)

// 新增當前路徑

//把輸入的字串作為python**直接執行,返回0

//表示成功,-1表示有錯。大多時候錯誤都是因為字串

//中有語法錯誤。

pyrun_******string("import sys");

pyobject *pname,*pmodule,*pdict,*pfunc,*pargs;

// 載入名為pytest的指令碼

pname = pystring_fromstring("pytest");

pmodule = pyimport_import(pname);

if ( !pmodule )

pdict = pymodule_getdict(pmodule);

if ( !pdict )

// 找出函式名為add的函式

pfunc = pydict_getitemstring(pdict, "add");

if ( !pfunc || !pycallable_check(pfunc) )

// 引數進棧

pargs = pytuple_new(2);

// pyobject* py_buildvalue(char *format, ...)

// 把c++的變數轉換成乙個python物件。當需要從

// c++傳遞變數到python時,就會使用這個函式。此函式

// 有點類似c的printf,但格式不同。常用的格式有

// s 表示字串,

// i 表示整型變數,

// f 表示浮點數,

// o 表示乙個python物件。

pytuple_setitem(pargs, 0, py_buildvalue("l",3));

pytuple_setitem(pargs, 1, py_buildvalue("l",4));

// 呼叫python函式

pyobject_callobject(pfunc, pargs);

//下面這段是查詢函式foo 並執行foo

pfunc = pydict_getitemstring(pdict, "foo");

if ( !pfunc || !pycallable_check(pfunc) )

pargs = pytuple_new(1);

pytuple_setitem(pargs, 0, py_buildvalue("l",2)); //

pyobject_callobject(pfunc, pargs);

py_decref(pname);

py_decref(pargs);

py_decref(pmodule);

// 關閉python

py_finalize();

return 0;

}編譯選項, 需要手動指定python 的include 路徑, 和鏈結接路徑,

**:g++ python.cpp -o python -i/usr/include/python2.5 -l/usr/lib/python2.5 -lpython2.5

如果你的python 版本號與我的不同,請修改為你自己的版本號

C語言呼叫Python指令碼中的函式

注 本文參考了博文 python功能強大,擁有豐富的庫,可以輕而易舉的做很多用c c 等重量級語言不太方便做到的事情,因為如果在c語言中呼叫python指令碼,則會分發揮python的優點,而且很重要的一點,由於python是解釋執行,如果python中的模組發生改變,不需要重新編譯源 靈活性比c更...

黃聰 C 中呼叫python指令碼語言

1.安裝ironpython 2.建立專案 建立乙個c 的控制台應用程式。新增引用 瀏覽到ironpython的安裝目錄中,新增對ironpython.dll,microsoft.scripting.dll 兩個dll的引用。3.新增python檔案到當前的專案中 def welcome name ...

Python 呼叫shell指令碼

python呼叫shell指令碼,有兩種方法 os.system cmd 或os.popen cmd 前者返回值是指令碼的退出狀態碼,後者的返回值是指令碼執行過程中的輸出內容。實際使用時視需求情況而選擇。現假定有乙個shell指令碼test.sh bin bash 1.echo hello worl...