1. 程式人生 > >c++ 呼叫 python 例項 涉及 類 多引數 列表作為引數

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("@