多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內(nèi)最全I(xiàn)T社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁 > 互聯(lián)網(wǎng) > C/C++中如何調(diào)用Python

C/C++中如何調(diào)用Python

來源:程序員人生   發(fā)布時(shí)間:2015-06-29 08:22:36 閱讀次數(shù):3722次
C++中調(diào)用Python腳本的意義就不講了,最少你可以把它當(dāng)做文本情勢的動態(tài)鏈接庫, 

需要的時(shí)候還可以改1改,只要不改變接口, C++的程序1旦編譯好了,再改就沒那末方便了 

先看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 
    //在使用Python系統(tǒng)前,必須使用Py_Initialize對其 
    //進(jìn)行初始化。它會載入Python的內(nèi)建模塊并添加系統(tǒng)路 
    //徑到模塊搜索路徑中。這個(gè)函數(shù)沒有返回值,檢查系統(tǒng) 
    //是不是初始化成功需要使用Py_IsInitialized。 

    Py_Initialize(); 

    // 檢查初始化是不是成功 
    if ( !Py_IsInitialized() ) 
    { 
        return ⑴; 
    } 

    // 添加當(dāng)前路徑 
    //把輸入的字符串作為Python代碼直接運(yùn)行,返回0 
    //表示成功,⑴表示有錯(cuò)。大多時(shí)候毛病都是由于字符串 
    //中有語法毛病。 
    PyRun_SimpleString("import sys"); 
    PyRun_SimpleString("sys.path.append('./')"); 
    PyObject *pName,*pModule,*pDict,*pFunc,*pArgs; 

    // 載入名為pytest的腳本 
    pName = PyString_FromString("pytest"); 
    pModule = PyImport_Import(pName); 
    if ( !pModule ) 
    { 
        printf("can't find pytest.py"); 
        getchar(); 
        return ⑴; 
    } 
    pDict = PyModule_GetDict(pModule); 
    if ( !pDict ) 
    { 
        return ⑴; 
    } 

    // 找出函數(shù)名為add的函數(shù) 
    pFunc = PyDict_GetItemString(pDict, "add"); 
    if ( !pFunc || !PyCallable_Check(pFunc) ) 
    { 
        printf("can't find function [add]"); 
        getchar(); 
        return ⑴; 
    } 

    // 參數(shù)進(jìn)棧 
    *pArgs; 
    pArgs = PyTuple_New(2); 

    //  PyObject* Py_BuildValue(char *format, ...) 
    //  把C++的變量轉(zhuǎn)換成1個(gè)Python對象。當(dāng)需要從 
    //  C++傳遞變量到Python時(shí),就會使用這個(gè)函數(shù)。此函數(shù) 
    //  有點(diǎn)類似C的printf,但格式不同。經(jīng)常使用的格式有 
    //  s 表示字符串, 
    //  i 表示整型變量, 
    //  f 表示浮點(diǎn)數(shù), 
    //  O 表示1個(gè)Python對象。 

    PyTuple_SetItem(pArgs, 0, Py_BuildValue("l",3)); 
    PyTuple_SetItem(pArgs, 1, Py_BuildValue("l",4)); 

    // 調(diào)用Python函數(shù) 
    PyObject_CallObject(pFunc, pArgs); 

    //下面這段是查找函數(shù)foo 并履行foo 
    pFunc = PyDict_GetItemString(pDict, "foo"); 
    if ( !pFunc || !PyCallable_Check(pFunc) ) 
    { 
        printf("can't find function [foo]"); 
        getchar(); 
        return ⑴; 
    } 

    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); 

    // 關(guān)閉Python 
    Py_Finalize(); 
    return 0; 



編譯選項(xiàng), 需要手動指定Python 的include 路徑, 和鏈接接路徑, 


g++ Python.cpp -o Python -I/usr/include/python2.5 -L/usr/lib/python2.5 -lpython2.5 

生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 久久天天躁狠狠躁夜夜不卡 | 一区二区三区欧美视频 | 午夜黄视频| 亚洲高清中文字幕 | 91不卡视频 | 国产成人精品一区二区不卡 | 国产亚洲成归v人片在线观看 | 一级毛片视频免费观看 | 亚洲精品自拍视频 | 黄色大片aa| ppypp日本欧美一区二区 | 91porn丨首页入口 | 亚洲综合视频 | 亚洲 欧美 成人 | 一区二区三区在线观看视频 | 日本vs黑人hd | 久久精品国产主播一区二区 | 国产亚洲第一 | videoa性欧美| 亚洲高清网站 | 国语对白清晰好大好白在线 | 国产精品一页 | 亚洲高清在线观看播放 | 波多野衣结在线精品二区 | 国产在线观看成人 | 中文字幕亚洲综合精品一区 | 亚洲综合视频网 | 国产欧美亚洲三区久在线观看 | 亚洲精品高清视频 | 国产欧美日韩一区二区三区视频 | 99久久精品国产一区二区三区 | 全黄大全大色全免费大片 | 噜噜噜在线 | 欧美成人一区二区三区在线视频 | 精品久久久久久久一区二区伦理 | 亚洲精品人成在线观看 | 欧美videos13_14| 欧美日韩无 | 精品国产91久久久久久久 | 日韩福利网 | 玖玖色资源 |