您好,登錄后才能下訂單哦!
這篇文章主要介紹了怎么在C++中調用python代碼,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
windows
VS2015
python的話用的是acaconda自帶的python環境,不同版本的acaconda自帶的python不同,我的是python3.6(這一步很重要,如果使用acaconda創建的虛擬環境的python,可能會不成功)
然后右擊C++項目,選擇屬性,點擊VC++目錄,然后在包含目錄中添加include文件夾,在庫目錄中添加libs文件夾
因為配置為Debug,所以是添加python36_d.lib,而不是python36.lib。如果沒有這個文件,直接復制python36.lib,然后命名為python36_d.lib即可。如圖所示
想要在C++代碼中調用python中的vsdemo.py的max函數,首先python代碼如圖所示
def max(a,b): if a>b: return a else: return b
C++代碼如圖所示
#include <iostream> #include<python.h> #include"stdio.h" using namespace std; int main() { Py_Initialize();//使用python之前,要調用Py_Initialize();這個函數進行初始化 if (!Py_IsInitialized()) { printf("初始化失敗!"); return 0; } PyRun_SimpleString("import sys"); PyRun_SimpleString("sys.path.append('./')");//這一步很重要,修改Python路徑 PyObject* pModule = NULL;//聲明變量 PyObject* pFunc = NULL;// 聲明變量 pModule = PyImport_ImportModule("vsdemo");//這里是要調用的文件名vsdemo.py if (pModule == NULL) { cout << "沒找到" << endl; } pFunc = PyObject_GetAttrString(pModule, "max");//這里是要調用的函數名max PyObject* pParams = Py_BuildValue("(ss)", "3", "4");//兩個字符串參數 char* result; PyObject* pRet = PyObject_CallObject(pFunc, pParams);//調用函數 pRet是得到的結果 int res = 0; PyArg_Parse(pRet, "s", &result);//轉換結果的返回類型 cout << "res:" << result << endl;//輸出結果 system("pause"); Py_Finalize();//調用Py_Finalize,這個根Py_Initialize相對應的。 return 0; }
同時需要把python代碼,即vsdemo.py文件,放到c++項目文件中,然后再運行
(1)可能會出現找不到python36.dll的錯誤,可以從acaconda中找到該文件,復制到c++項目文件中即可,如圖所示
感謝你能夠認真閱讀完這篇文章,希望小編分享的“怎么在C++中調用python代碼”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。