將Python代碼嵌入C++程序進(jìn)行編寫的實例
把python嵌入的C++里面需要做一些步驟
安裝python程序,這樣才能使用python的頭文件和庫
在我們寫的源文件中增加“Python.h”頭文件,并且鏈入“python**.lib”庫(還沒搞清楚這個庫時靜態(tài)庫還是導(dǎo)出庫,需要搞清楚)
掌握和了解一些python的C語言api,以便在我們的c++程序中使用
常用的一些C API函數(shù)
在了解下面的函數(shù)之前有必要了解一下**PyObject***指針,python里面幾乎所有的對象都是使用這個指針來指示的。
Py_Initialize()&&Py_Finalize()
在調(diào)用任何python的c函數(shù)之前需要調(diào)用的函數(shù),“Py_Initialize”是用來初始化python模塊的,推測是加載初始化加載dll的。對應(yīng)的在使用python模塊之后用“Py_Finalize”來釋放模塊。
PyImport_ImportModule()
用來載入一個python模塊,這個模塊就是一般的python文件。這里需要注意的是,在加載這個模塊的時候會執(zhí)行模塊里面所有可以執(zhí)行的語句。包括import導(dǎo)入語句和在函數(shù)體之外的所有語句
PyObject_GetAttrString()
返回模塊里面的函數(shù)
Py_BuildValue()
建立一個參數(shù)元組,一般都是用這個函數(shù)來建立元組,然后將這個元組作為參數(shù)傳遞給python里面的函數(shù)。
PyEval_CallObject()
調(diào)用函數(shù),并把“Py_BuildValue”建立的元組作為參數(shù)傳遞給被調(diào)用的函數(shù)
源碼實例
下面的實例是在c++代碼中調(diào)用Python的函數(shù),傳遞參數(shù)并且獲取返回值
test.cpp代碼
#include <iostream> #include <Python.h> using namespace std; int main(int argc, char* argv[]) { Py_Initialize(); //初始化 PyObject* pModule = NULL; PyObject* pFunc = NULL; PyObject* pParam = NULL; PyObject* pResult = NULL; const char* pBuffer = NULL; int iBufferSize = 0; pModule = PyImport_ImportModule(“test_python"); if (!pModule) { cout << "get module failed!" << endl; exit (0); } pFunc = PyObject_GetAttrString(pModule, "main"); if (!pFunc) { cout << "get func failed!" << endl; cout << int(pFunc) << endl; exit (0); } pParam = Py_BuildValue("(s)", "HEHEHE"); pResult = PyEval_CallObject(pFunc,pParam); if(pResult) { if(PyArg_Parse(pResult, "(si)", &pBuffer, iBufferSize)) { cout << pBuffer << endl; cout << iBufferSize << endl; } } Py_DECREF(pParam); Py_DECREF(pFunc); Py_Finalize(); //cout << "hello" << endl; return 0; }
test_python.py代碼
def main(szString): return ("hello", 5)
相關(guān)文章
Python排序方法中sort和sorted的區(qū)別詳解
在python中常用的排序函數(shù)就是sort()和sorted()這兩個函數(shù),使用 sort() 或內(nèi)建函數(shù) sorted() 對列表進(jìn)行排序,本文將詳細(xì)介紹sorted和sort兩者之間的區(qū)別,感興趣的可以了解一下2023-08-08寫了個監(jiān)控nginx進(jìn)程的Python腳本
接上一文用iptables讓SSH服務(wù)對陌生人說不。還是有點擔(dān)心這個學(xué)期內(nèi),nginx可能會因為系統(tǒng)各種原因而出現(xiàn)異常退出,導(dǎo)致Web服務(wù)暫停。所以,又來了一個方案2012-05-05Python 元組拆包示例(Tuple Unpacking)
今天小編就為大家分享一篇Python 元組拆包實例(Tuple Unpacking),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-12-12零基礎(chǔ)學(xué)python應(yīng)該從哪里入手
在本篇文章里小編給大家分享的是一篇關(guān)于零基礎(chǔ)學(xué)python應(yīng)該從哪里入手的相關(guān)基礎(chǔ)內(nèi)容,需要的朋友們可以參考下。2020-08-08Python實現(xiàn)將通信達(dá).day文件讀取為DataFrame
今天小編就為大家分享一篇Python實現(xiàn)將通信達(dá).day文件讀取為DataFrame,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-12-12