c++ 呼叫 python 例項 涉及 類 多引數 列表作為引數
1個解析ip的python程式碼,檔名為ipParser.py
class IPParser: def __init__(self): pass def _parse_ip( self, line ): segs = line.split(".") if len(segs) != 4: return (False,"Invalid input format : %s" %(line)) cells = [] for seg in segs: cell = [] for i in seg.split(","): if '-' not in i: cell.append(i) else: start,end = i.split("-") cell += [ str(i) for i in range( int(start), int(end) + 1)] cells.append(cell) hosts = [] for s0 in cells[0]: for s1 in cells[1]: for s2 in cells[2]: for s3 in cells[3]: host = ".".join([s0,s1,s2,s3]) hosts.append(host) return hosts def parse_ip( self, lines ): hosts = [] for line in lines: for sub_line in line.split(" "): hosts += self._parse_ip(sub_line) return hosts
1個公共使用的python程式碼,檔名為shareFun.py
def parseStr(s,delimiter):
return s.split(delimiter)
下面是c++程式碼
void TestMultiArgsAndClass() { Py_Initialize(); //****************下面引用shareFun.py的程式碼 PyObject *pModule =PyImport_ImportModule("shareFun");//匯入py模組 PyObject *pFunc= PyObject_GetAttrString(pModule, "parseStr"); //引入py模組中的函式 //建立形參 PyObject *pArgs = PyTuple_New(2); PyTuple_SetItem(pArgs, 0, Py_BuildValue("s", "10.0.1.1-10;10.0.2.11-13")); PyTuple_SetItem(pArgs, 1, Py_BuildValue("s", ";")); //說明: py模組中的parseStr函式的形參為兩個str,這裡傳遞的pArgs是元組,原因是PyEval_CallObject的第2形參的格式要求; PyObject *pReturn = PyEval_CallObject(pFunc, pArgs);//呼叫函式 //***************下面引用ipParser.py的程式碼 PyObject * pModule2 =PyImport_ImportModule("ipParser"); PyObject *pClassIpParser = PyObject_GetAttrString(pModule2, "IPParser"); //上面兩個步驟與匯入shareFun.py步驟相同 //類的例項 PyObject *pInstanceIpParser = PyInstance_New(pClassIpParser, NULL, NULL); //呼叫類物件pInstanceIpParser的parse_ip方法,形參為pReturn // Py_BuildValue("s","parse_ip") 將c字串轉為python字串 PyObject * prrr = PyObject_CallMethodObjArgs(pInstanceIpParser, Py_BuildValue("s","parse_ip"), pReturn,NULL); //處理返回值: int size = PyList_Size(prrr);//prrr 為列表 cout << "返回列表的大小為: " << size << endl; for(int i=0;i<size;++i) { PyObject *pNewAge = PyList_GetItem(prrr,i);//相當於 python中的prrr[i] char * newAge; PyArg_Parse(pNewAge, "s", &newAge);//將python的字串轉為c字串 cout << newAge << endl; } Py_Finalize(); }
結果:
相關推薦
c++ 呼叫 python 例項 涉及 類 多引數 列表作為引數
1個解析ip的python程式碼,檔名為ipParser.py class IPParser: def __init__(self): pass def _parse_ip( self, line ): segs = line.split(".") if
C++呼叫Python例項
C++呼叫Python方法基本有以下幾個步驟: 1、下載Python; 2、配置資訊(本次我用的配置是VS2013+Python36),注意Python請下載32位的版本(即使你的作業系統是64位的),否則會函式未定義的錯誤 3、把Python加到VS2013的方法;先建立
C++呼叫python:無引數,簡單helloworld示例
執行環境:VS2015 + python3.4 總體步驟簡單來說如下: 設定編譯環境,其實就是設定Python的標頭檔案和庫檔案目錄以及一個很讓人頭疼的python3.4_d.lib問題 初始化Python直譯器: Py_Initialize();
C++呼叫Python函式並傳入傳出引數
步驟 包含Python.h,引入python.lib Py_Initialize()初始化,結束時呼叫Py_Finalize() 匯入sys模組,新增python指令碼路徑 匯入指令碼檔案,從指令碼中匯入函式模組 構造入參,如果有三個引數就構造PyTupl
C++呼叫Python 3.7.0
開發環境:Visual Studio 2015 + Python 3.7.0 一、在C++程式碼中寫Python指令碼 在C++中含有呼叫Python指令碼的API函式,在C++程式碼中嵌入Python指令碼程式碼,是通過PyRun_SimpleString()函式實現。它允許將Pyth
Python例項方法, 類方法, 靜態方法, 函式 小結
不想訪問 類內 和 例項內 的變數,用靜態方法 只想訪問類內變數,不想訪問例項變數,用類方法 即要訪問內變數,也想訪問例項變數用例項方法 函式與靜態方法相同,只是靜態方式的作用域定義在類內 例項方
.net 呼叫python 例項
如標題 ,python屬於解釋型語言,所以直接將python的檔案copy到專案中 新建.net控制檯應用程式,直接nuget IronPython 安裝成功後 在專案內新建Sum資料夾,將py.py放置資料夾之內 # -*- coding:UTF-
淺析 C++ 呼叫 Python 模組
淺析 C++ 呼叫 Python 模組 作為一種膠水語言,Python 能夠很容易地呼叫 C 、 C++ 等語言,也能夠通過其他語言呼叫 Python 的模組。 Python 提供了 C++ 庫,使得開發者能很方便地從 C++ 程式中呼叫 Python 模組。 具體的文件參考
C++ 呼叫Python(Pyc檔案)
原文地址:https://blog.csdn.net/horizons_kong/article/details/79030183 注:本文預設已經正確安裝Python3.4 1.編輯PythonLib.py檔案,內容如下(主要定義了兩個函式): 2.執行cmd視窗,定位到Pyth
c++ 呼叫Python指令碼或者動態庫——環境Ubuntu 16.04下用codeblocks
背景:因為使用的是python版本的程式,最終要整合到C++環境的架構中,也就是說架構是c++的,交付使用者為c++的介面,但是呼叫的是python的庫,因此需要學習在c++環境下呼叫python。因為對python不熟悉,可以說有點一抹黑,因此從簡到難逐步探索。首先在c++
VS C++呼叫python進行畫圖matplotlib
專案配置 需要做一些配置,很常見的。 專案名: Test 文章目錄 專案配置 注意!!!! include修改 lib修改 libs目錄新增 新增libs
C呼叫Python的示例程式碼
fext_tensorrt的程式碼如下: def fext_call(arg1, arg2): print("fext_call()", arg1, arg2) return "fext_call" C的程式碼如下,傳遞兩個引數,獲取並輸出函式呼叫結果:
c#呼叫python的四種方法(嘗試了四種,只詳細講解本人成功的後兩種,其餘方法只列出,詳細用法請自行谷歌百度)
一、使用c#,nuget管理包上下載的ironPython安裝包 嘗試後發現,對引用了numpy等第三方庫的python程式碼,會報找不到模組xxx的錯誤,上網查證後發現此問題基本難以解決 二、使用c++程式呼叫python檔案,然後將其做成動態連結庫
C++呼叫Python模組
一:環境VS2015,Python3.7,Windows 64位作業系統 二:環境配置自行百度 三:新建VS控制檯工程,並在工程目錄下建立PyModule.py檔案 四:編寫PyModule.py檔案,程式碼如下: def retNum(): return 12345 de
C++呼叫python(VS2015)
新建win32控制檯程式call_py python配置注意右上角配置(選擇release還是debug,還有平臺),這裡選的什麼,執行的時候就選什麼。 編寫程式碼 #include<P
C++呼叫python步驟
最近一直思考如何將彌補c++中的資料探勘演算法不足的問題,畢竟現在大家都圖省事的說。於是現有語言中屬python的庫檔案最多,且簡單的膠水語言。那麼通過c++呼叫Python會不會很方便呢?所以本著這樣的想法我們研究一下。 1、對python目錄下的檔案檢查 首先你得安裝python 我
vs2010中C++呼叫python指令碼並製作安裝包
一、 準備工作 1. 安裝visual studio 210。 2. 安裝python編譯環境,筆者版本為2.7.2。 3. 安裝py2exe,用於給編寫好的python打包。 二、編寫python指令碼程式 以下程式為筆者為學校的bbs寫的登陸指令碼LilyLogin.
Qtcreator中C++呼叫python方法
最近可能需要做一個專案,可能需要c++中呼叫python,在網上找了一些資料學習了一下。 1. 建立c++ 和 python檔案 首先在qtcreator建立一個qt console application 然後在專案中新增一個pyth
win64下C++呼叫python指令碼
#include <iostream> #include <Python.h> using namespace std; int main() { // D:\Python27\include\pyconfig.h // 修改 https://blog.csdn.n
C#呼叫SQL中的儲存過程中有output引數
string strsql = string.Format("Sp_AutoTenderTrialAll"); SqlParameter[] sqlParam = new SqlParameter[]{ new SqlParameter("@