欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

如何使用C++調(diào)用Python代碼-創(chuàng)新互聯(lián)

這篇文章主要介紹如何使用C++調(diào)用Python代碼,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

成都創(chuàng)新互聯(lián)從2013年創(chuàng)立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目成都網(wǎng)站制作、成都做網(wǎng)站、外貿(mào)營銷網(wǎng)站建設(shè)網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元欽北做網(wǎng)站,已為上家服務(wù),為欽北各地企業(yè)和個人服務(wù),聯(lián)系電話:18982081108

一、配置python環(huán)境問題

1.首先安裝Python(版本無所謂),安裝的時候選的添加python路徑到環(huán)境變量中

安裝之后的文件夾如下所示:

2.在VS中配置環(huán)境和庫 右擊項目->屬性->VC++目錄

1)包含目錄:

Python安裝路徑/include

2)庫目錄:

Python安裝路徑/libs

右擊項目->屬性->連接器->輸入->附加依賴庫

debug下:

python安裝目錄/libs/python37_d.lib

release下:

python安裝目錄/libs/python37.lib

注意

1、debug配置的時候可能沒有python37_d.lib,那就把python37.lib復制一個,然后重命名為python37_d.lib就可以啦

2、如果一直報錯,但是包含頭文件等都沒有問題,那么你需要看一下你的python是32位還是64位的。然后根據(jù)python的環(huán)境去配置vs的環(huán)境。

二、C++調(diào)用python函數(shù)并輸出返回值

首先可能有個坑!一定要保證這個python函數(shù)所在的文件能夠正常運行!然后把python代碼放到和C++代碼同一目錄下。

1、定義Python函數(shù)

#!python3# -*- coding:utf-8 -*-import base64import hmacfrom hashlib import sha1def hash_hmac(code , key): #sha1加密簽名算法 hmac_code = hmac.new(key.encode() , code.encode() , sha1).digest() return base64.b64encode(hmac_code).decode()

2、編寫C++代碼

#include <iostream>#include<python.h>using namespace std;int main(){ Py_Initialize();//使用python之前,要調(diào)用Py_Initialize();這個函數(shù)進行初始化 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("hash_hmac");//這里是要調(diào)用的文件名hash_hmac.py if (pModule == NULL) { cout << "沒找到" << endl; } pFunc = PyObject_GetAttrString(pModule, "hash_hmac");//這里是要調(diào)用的函數(shù)名 //兩個字符串參數(shù) PyObject* pParams = Py_BuildValue("(ss)", "/oss/upload?bucket=test&filekey=test/image/3b/3ba9d94cab2f8868823d71c4445e125a.png\n" , "q4mJAS777BUbbdVpEqh3XRcZZqNyDweU4GRnM690"); char* result; PyObject* pRet = PyObject_CallObject(pFunc, pParams);//調(diào)用函數(shù) int res = 0; PyArg_Parse(pRet, "s", &result);//轉(zhuǎn)換返回類型 cout << "res:" << result << endl;//輸出結(jié)果 Py_Finalize();//調(diào)用Py_Finalize,這個根Py_Initialize相對應的。 return 0;}

3、解釋部分C++代碼

PyObject* pParams = Py_BuildValue("(ss)", "/oss/upload?bucket=test&filekey=test/image/3b/3ba9d94cab2f8868823d71c4445e125a.png\n" , "q4mJAS777BUbbdVpEqh3XRcZZqNyDweU4GRnM690");

在這里我輸入了兩個字符串類型的參數(shù),Py_BuildValue()函數(shù)的作用和PyArg_ParseTuple()的作用相反,它將C類型的數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換成Python對象。

該函數(shù)可以和PyArg_ParseTuple()函數(shù)一樣識別一系列的格式串,但是輸入?yún)?shù)只能是值,而不能是指針。

它返回一個Python對象和PyArg_ParseTuple()不同的一點是PyArg_ParseTuple()函數(shù)它的第一個參數(shù)為元組,Py_BuildValue()則不一定會生成一個元組。它生成一個元組僅僅當格式串包含兩個或者多個格式單元,如果格式串為空,返回NONE。

在下面的描述中,括號中的項是格式單元返回的Python對象類型,方括號中的項為傳遞的C的值的類型。

“s” (string) [char *] :將C字符串轉(zhuǎn)換成Python對象,如果C字符串為空,返回NONE。

“s#” (string) [char *, int] :將C字符串和它的長度轉(zhuǎn)換成Python對象,如果C字符串為空指針,長度忽略,返回NONE。

“z” (string or None) [char *] :作用同”s”。

“z#” (string or None) [char *, int] :作用同”s#”。

“i” (integer) [int] :將一個C類型的int轉(zhuǎn)換成Python int對象。

“b” (integer) [char] :作用同”i”。

“h” (integer) [short int] :作用同”i”。

“l(fā)” (integer) [long int] :將C類型的long轉(zhuǎn)換成Pyhon中的int對象。

“c” (string of length 1) [char] :將C類型的char轉(zhuǎn)換成長度為1的Python字符串對象。

“d” (float) [double] :將C類型的double轉(zhuǎn)換成python中的浮點型對象。

“f” (float) [float] :作用同”d”。

“O&” (object) [converter, anything] :將任何數(shù)據(jù)類型通過轉(zhuǎn)換函數(shù)轉(zhuǎn)換成Python對象,這些數(shù)據(jù)作為轉(zhuǎn)換函數(shù)的參數(shù)被調(diào)用并且返回一個新的Python對象,如果發(fā)生錯誤返回NULL。

“(items)” (tuple) [matching-items] :將一系列的C值轉(zhuǎn)換成Python元組。

“[items]” (list) [matching-items] :將一系列的C值轉(zhuǎn)換成Python列表。

“{items}” (dictionary) [matching-items] :將一系類的C值轉(zhuǎn)換成Python的字典,每一對連續(xù)的C值將轉(zhuǎn)換成一個鍵值對。

例如:

Py_BuildValue(“”) None

Py_BuildValue(“i”, 123) 123

Py_BuildValue(“iii”, 123, 456, 789) (123, 456, 789)

Py_BuildValue(“s”, “hello”) ‘hello'

Py_BuildValue(“ss”, “hello”, “world”) (‘hello', ‘world')

Py_BuildValue(“s#”, “hello”, 4) ‘hell'

Py_BuildValue(“()”) ()

Py_BuildValue(“(i)”, 123) (123,)

Py_BuildValue(“(ii)”, 123, 456) (123, 456)

Py_BuildValue(“(i,i)”, 123, 456) (123, 456)

Py_BuildValue(“[i,i]”, 123, 456) [123, 456] Py_BuildValue(“{s:i,s:i}”, “abc”, 123, “def”, 456) {‘a(chǎn)bc': 123, ‘def': 456}

Py_BuildValue(“((ii)(ii)) (ii)”, 1, 2, 3, 4, 5, 6) (((1, 2), (3, 4)), (5, 6))

3、運行C++程序

與Python代碼的預期相同。

三、Python代碼處理

在發(fā)布軟件的時候,通常我們都不希望代碼可以直接被別人看到。

以上的Debug目錄中的exe要想能夠單獨運行,必須把python腳本拷過去。為了不讓別人能直接看到我的代碼,我拷過去的是生成的.pyc文件,實現(xiàn)了一個簡單的python代碼的加密。不過據(jù)說可以反編譯,但是對我來說已經(jīng)夠了。

四、.py和.pyc的區(qū)別

原來Python的程序中,是把原始程序代碼放在.py文件里,而Python會在執(zhí)行.py文件的時候。將.py形式的程序編譯成中間式文件(byte-compiled)的.pyc文件,這么做的目的就是為了加快下次執(zhí)行文件的速度。

所以,在我們運行python文件的時候,就會自動首先查看是否具有.pyc文件,如果有的話,而且.py文件的修改時間和.pyc的修改時間一樣,就會讀取.pyc文件,否則,Python就會讀原來的.py文件。

其實并不是所有的.py文件在與運行的時候都會產(chǎn)生.pyc文件,只有在import相應的.py文件的時候,才會生成相應的.pyc文件。

五、使用.py生成.pyc

在命令行下使用下列命令即可:

python -m py_compile test.py#單文件python -m py_compile /root/src/{file1,file2}.py#多文件

以上是“如何使用C++調(diào)用Python代碼”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

文章標題:如何使用C++調(diào)用Python代碼-創(chuàng)新互聯(lián)
網(wǎng)頁路徑:http://aaarwkj.com/article34/hcise.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗、網(wǎng)站策劃做網(wǎng)站、微信公眾號、外貿(mào)網(wǎng)站建設(shè)外貿(mào)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)
青青草国产精品一区二区| 91高清视频在线免费观看| 亚洲国产日韩欧美综合久久| 国产亚洲中文字幕91| 亚洲国产第一尤物视频| 精品人妻一区三区蜜桃| 校花出白浆视频一区二区三区| 18岁下禁止看的视频| 午夜福利片免费在线观看| 亚洲国产偷拍在线观看| 91精品久久久久久| 久久亚洲一区二区三区乱码| 日本一区二区不卡二区| 性欧美一区二区三区| 国产精品白浆大屁股一区二区三 | 国产欧美一区二区三区久久| 日韩黄片一区二区三区| 国产成人国产精品国产三级| 日韩高清在线一区二区三区| 日韩欧美一区二区中文字幕视频| 人妖系列中文字幕欧美系列| 人妻露脸国语对白字幕| 在线观看男人的天堂av| 最新日韩一区二区在线| 在线观看国产小视频不卡| 粉嫩国产精品一区二区| 欧美精品一区二区网址| 日韩亚洲在线中文字幕| 黑人巨大精品欧美一区免| 五月婷婷丁香噜噜噜噜| 成人激情视频在线网页| 成人久久精品一区二区| 久久成人a毛片免费观看网站| 日本一区二区免费高清不卡| 亚洲av毛片在线网站| 国产日韩视频一区二区| 亚洲欧美精品一区二区三区| 日本理论高清在线观看| 国产一级黄色录像大片| 日本精品在线不卡视频| 国内精日韩欧中文的话|