日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

VS2017 C++工程 执行python脚本

發(fā)布時(shí)間:2023/12/10 python 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 VS2017 C++工程 执行python脚本 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

我解決了哪怕很小的一個(gè)問題,我也想記錄下來來見證我的經(jīng)歷。

背景:

一、使用libhuru庫生成pdf報(bào)告

最近參與一些測(cè)試工作,希望測(cè)試結(jié)束后能夠根據(jù)測(cè)試得到的數(shù)據(jù)和圖像自動(dòng)生成測(cè)試報(bào)告,最開始調(diào)研到了生成報(bào)告的庫有l(wèi)ibharu和libpdf,libharu是開源庫但是很久沒有人維護(hù)了,libpdf商業(yè)使用需要授權(quán),最后選擇使用libharu,關(guān)于使用libharu庫,首先是對(duì)應(yīng)的libhpdf.lib庫的編譯,需要依賴zlib和libpng兩個(gè)庫,在windows下使用cmake編譯的步驟可以參考這篇博客,libharu編譯過程,我按照這篇文章編譯了64位的libhpdfs.lib,關(guān)于基于libharu庫,可以解決報(bào)告中的表格和圖像加載的問題的例程,可以參考這里基于libharu庫生成pdf報(bào)告的例程。我使用剛才編譯的64位的libhpdf.lib來編譯這個(gè)例程,除了加載png圖像失敗之外,其他我用到的函數(shù)都是正常的。我只能先加載jpg圖像,但是圖片壓縮嚴(yán)重,不夠清晰。就無法加載png圖像這個(gè)問題,我咨詢過這個(gè)例程的作者,作者也很友好的測(cè)試了我的demo,并沒有復(fù)現(xiàn)我描述的問題,后來我使用了他提供的libhpdf.lib,竟然成功加載了png圖像,當(dāng)然我必須是在x86的模式下,而我的大工程是x64的,所以這個(gè)問題很是不好解決,網(wǎng)上也看到很多小伙伴反應(yīng)使用libhpdf庫不能成功加載png圖像的問題,問題主要出在下面這個(gè)函數(shù),這個(gè)函數(shù)調(diào)用后返回的img為空,所以無法在pdf文件上加載圖像。有網(wǎng)友說是分配內(nèi)存失敗,但是我一直也沒有找到解決這個(gè)問題的有效的方法,只好先放一下。

img = HPDF_LoadPngImageFromFile(pdf, t.path.c_str());

上個(gè)月末,跟line manager匯報(bào)工作,他對(duì)我生成的報(bào)告上的圖像很是不滿意,其實(shí)窮自己也不滿意,實(shí)在是不清晰,但是這個(gè)問題一直沒能得到解決,我也是很是苦惱,他再次給我建議試一下使用python看能不能有好的解決方法,一想到我需要使用python重新搞一遍,我就有些苦惱,擔(dān)心工作量會(huì)很大,這又到月末,如果做不出效果,要影響我這個(gè)月的績(jī)效了。但是沒有辦法,誰讓我自從五一放假回來后,就有些不思進(jìn)取,玩物喪志呢,我還是 硬著頭皮,繼續(xù)搜索python方法。前幾天剛充了會(huì)員,現(xiàn)在一搜,搜到了下面這篇文章,使用python生成圖文并茂的pdf報(bào)告,讓我耳目一新,感嘆一句,花了錢果然不一樣,辦事效率高了很多。

二、使用python和reportlab庫生成pdf報(bào)告

1. windows下安裝reportlab

首先要保證你電腦上已經(jīng)安裝了python了哈,我電腦安裝的python版本為3.8.7

pip版本為20.3.3

然后

1. win+R 2. 輸入cmd #打開命令行窗口 3. 在命令行輸入:pip install reportlab

如果在安裝失敗請(qǐng)查看這篇文章,那你退出那個(gè)軟件(哈哈,你懂得),再重現(xiàn)安裝一下。

三、參考現(xiàn)有的例程

我第一次接觸reportlab這個(gè)庫,想在很短的時(shí)間內(nèi)看到讓人滿意的效果,我不得不依賴于一個(gè)縣城的模板,于是我找到了這篇文章python之reportlab生成PDF文件。這個(gè)例子對(duì)于初學(xué)者來說是很具有參考價(jià)值的,但是唯一不足的地方是,調(diào)用函數(shù)時(shí)的輸入沒有給出,因?yàn)槲覍?duì)python使用不熟,不過經(jīng)過幾次測(cè)試,和研究也能夠搞清楚,函數(shù)的輸入時(shí)directory和List類型。因?yàn)槲乙呀?jīng)把測(cè)試數(shù)據(jù)保存到本地的csv文件中,所以我讀取了csv文件將里面的數(shù)據(jù)寫入到表格中去。

四、在C++工程中執(zhí)行python腳本

我的工作環(huán)境是win10,64位VS2017,我的測(cè)試工程是用C++寫的,我希望的是在測(cè)試程序運(yùn)行結(jié)束后,但是程序退出之前執(zhí)行python腳本自動(dòng)生成pdf測(cè)試報(bào)告,那我面臨的一個(gè)問題就是如何在C++工程中執(zhí)行python腳本,那么你就可以直接使用一個(gè)簡(jiǎn)單直接粗暴有效的方法就可以。這幾行代碼就是去執(zhí)行你指定的python腳本, 如果你需要將C++中的一些參數(shù)傳遞給python腳本,那么直接在command后面加上所需要參數(shù)就可以了。

std::string filename = "./test_report.py"; std::string command = "python "; command += filename; system(command.c_str());

五、C++工程中調(diào)用python函數(shù)或者進(jìn)行數(shù)據(jù)交換

1. 首先可以參考這篇文章配置相應(yīng)的python環(huán)境Windows10 C++(VS2017)調(diào)用python(python3.8)python配置,

(1)

(2)

(3)

2. 添加環(huán)境變量

?

上面的環(huán)境配置好了后可以測(cè)試一下上面鏈接中博主給的例子。我測(cè)試的結(jié)果存在一個(gè)問題就是,當(dāng)執(zhí)行的是普通的python腳本,也就是該python腳本中沒有調(diào)用第三方庫的時(shí)候,可以成功執(zhí)行,但是當(dāng)python腳本中有調(diào)用第三方的庫,如通過import numpy as np調(diào)用numpy庫時(shí),demo中的pModule = PyImport_ImportModule("helloWorld");就會(huì)出錯(cuò),返回的pModule為空。而如果刪掉import numpy as np,又正常調(diào)用了,我花了一天的時(shí)間一直沒有解決這個(gè)問題,后來考慮到我只是執(zhí)行單獨(dú)的一個(gè)腳本,不需要進(jìn)行數(shù)據(jù)交換,也不需要在C++工程中調(diào)用python中的函數(shù),那就用最簡(jiǎn)單直接的方法解決問題吧,就是我在上面說到的方法。

std::string filename = "./test_report.py"; std::string command = "python "; command += filename; system(command.c_str());

如果有效伙伴也遇到了上面的問題,并且最終解決了,請(qǐng)指教,哈哈。

?

?

總結(jié)

以上是生活随笔為你收集整理的VS2017 C++工程 执行python脚本的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。