日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > 互聯網 > C/C++中如何調用Python

C/C++中如何調用Python

來源:程序員人生   發布時間:2015-06-29 08:22:36 閱讀次數:3731次
C++中調用Python腳本的意義就不講了,最少你可以把它當做文本情勢的動態鏈接庫, 

需要的時候還可以改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系統前,必須使用Py_Initialize對其 
    //進行初始化。它會載入Python的內建模塊并添加系統路 
    //徑到模塊搜索路徑中。這個函數沒有返回值,檢查系統 
    //是不是初始化成功需要使用Py_IsInitialized。 

    Py_Initialize(); 

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

    // 添加當前路徑 
    //把輸入的字符串作為Python代碼直接運行,返回0 
    //表示成功,⑴表示有錯。大多時候毛病都是由于字符串 
    //中有語法毛病。 
    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 ⑴; 
    } 

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

    // 參數進棧 
    *pArgs; 
    pArgs = PyTuple_New(2); 

    //  PyObject* Py_BuildValue(char *format, ...) 
    //  把C++的變量轉換成1個Python對象。當需要從 
    //  C++傳遞變量到Python時,就會使用這個函數。此函數 
    //  有點類似C的printf,但格式不同。經常使用的格式有 
    //  s 表示字符串, 
    //  i 表示整型變量, 
    //  f 表示浮點數, 
    //  O 表示1個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) ) 
    { 
        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); 

    // 關閉Python 
    Py_Finalize(); 
    return 0; 



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


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

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 欧美色欧美亚洲另类二区 | 国产美女视频网站 | 日本公妇乱淫免费视频一区三区 | а_天堂中文最新版地址 | 国产精品一区二区三区不卡 | 成人免费网站在线观看 | 在线中文视频 | 黄色av一级 | 在线看无码的免费网站 | www.一区二区三区 | 性色av一区二区三区 | www.亚洲一区| 91精品国产综合久久久久久丝袜 | 色婷婷com | 亚洲欧美视频在线观看 | 久久人人爽人人爽 | 亚洲区中文字幕 | 中文久久| 欧美国产精品一区二区 | 黄色二区 | 综合久久综合久久 | 亚洲一级一级 | 久久lu| 国产日韩欧美一区二区 | 欧美成人免费网站 | 国产情侣一区二区三区 | 国产精品美女 | 美女洗澡一级毛片 | 亚洲欧美日韩一区 | 在线免费看毛片 | 成人欧美一区二区三区在线观看 | 日韩精品在线免费观看 | 亚洲国产成人精品女人久 | 成人区精品一区二区婷婷 | 久久国产区 | 免费精品视频一区二区三区 | 国产一区二区成人在线 | av电影日韩| 亚洲一区二区高清 | 久久精品亚洲精品国产欧美 | 在线观看日韩精品 |