VS2017 C++工程 执行python脚本

我解决了哪怕很小的一个问题,我也想记录下来来见证我的经历。

背景:

一、使用libhuru库生成pdf报告

最近参与一些测试工作,希望测试结束后能够根据测试得到的数据和图像自动生成测试报告,最开始调研到了生成报告的库有libharu和libpdf,libharu是开源库但是很久没有人维护了,libpdf商业使用需要授权,最后选择使用libharu,关于使用libharu库,首先是对应的libhpdf.lib库的编译,需要依赖zlib和libpng两个库,在windows下使用cmake编译的步骤可以参考这篇博客,libharu编译过程,我按照这篇文章编译了64位的libhpdfs.lib,关于基于libharu库,可以解决报告中的表格和图像加载的问题的例程,可以参考这里基于libharu库生成pdf报告的例程。我使用刚才编译的64位的libhpdf.lib来编译这个例程,除了加载png图像失败之外,其他我用到的函数都是正常的。我只能先加载jpg图像,但是图片压缩严重,不够清晰。就无法加载png图像这个问题,我咨询过这个例程的作者,作者也很友好的测试了我的demo,并没有复现我描述的问题,后来我使用了他提供的libhpdf.lib,竟然成功加载了png图像,当然我必须是在x86的模式下,而我的大工程是x64的,所以这个问题很是不好解决,网上也看到很多小伙伴反应使用libhpdf库不能成功加载png图像的问题,问题主要出在下面这个函数,这个函数调用后返回的img为空,所以无法在pdf文件上加载图像。有网友说是分配内存失败,但是我一直也没有找到解决这个问题的有效的方法,只好先放一下。

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

上个月末,跟line manager汇报工作,他对我生成的报告上的图像很是不满意,其实穷自己也不满意,实在是不清晰,但是这个问题一直没能得到解决,我也是很是苦恼,他再次给我建议试一下使用python看能不能有好的解决方法,一想到我需要使用python重新搞一遍,我就有些苦恼,担心工作量会很大,这又到月末,如果做不出效果,要影响我这个月的绩效了。但是没有办法,谁让我自从五一放假回来后,就有些不思进取,玩物丧志呢,我还是 硬着头皮,继续搜索python方法。前几天刚充了会员,现在一搜,搜到了下面这篇文章,使用python生成图文并茂的pdf报告,让我耳目一新,感叹一句,花了钱果然不一样,办事效率高了很多。

二、使用python和reportlab库生成pdf报告

1. windows下安装reportlab

首先要保证你电脑上已经安装了python了哈,我电脑安装的python版本为3.8.7

pip版本为20.3.3

然后

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

如果在安装失败请查看这篇文章,那你退出那个软件(哈哈,你懂得),再重现安装一下。

三、参考现有的例程

我第一次接触reportlab这个库,想在很短的时间内看到让人满意的效果,我不得不依赖于一个县城的模板,于是我找到了这篇文章python之reportlab生成PDF文件。这个例子对于初学者来说是很具有参考价值的,但是唯一不足的地方是,调用函数时的输入没有给出,因为我对python使用不熟,不过经过几次测试,和研究也能够搞清楚,函数的输入时directory和List类型。因为我已经把测试数据保存到本地的csv文件中,所以我读取了csv文件将里面的数据写入到表格中去。

四、在C++工程中执行python脚本

我的工作环境是win10,64位VS2017,我的测试工程是用C++写的,我希望的是在测试程序运行结束后,但是程序退出之前执行python脚本自动生成pdf测试报告,那我面临的一个问题就是如何在C++工程中执行python脚本,那么你就可以直接使用一个简单直接粗暴有效的方法就可以。这几行代码就是去执行你指定的python脚本, 如果你需要将C++中的一些参数传递给python脚本,那么直接在command后面加上所需要参数就可以了。

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

五、C++工程中调用python函数或者进行数据交换

1. 首先可以参考这篇文章配置相应的python环境Windows10 C++(VS2017)调用python(python3.8)python配置,

(1)

(2)

(3)

2. 添加环境变量

 

上面的环境配置好了后可以测试一下上面链接中博主给的例子。我测试的结果存在一个问题就是,当执行的是普通的python脚本,也就是该python脚本中没有调用第三方库的时候,可以成功执行,但是当python脚本中有调用第三方的库,如通过import numpy as np调用numpy库时,demo中的pModule = PyImport_ImportModule("helloWorld");就会出错,返回的pModule为空。而如果删掉import numpy as np,又正常调用了,我花了一天的时间一直没有解决这个问题,后来考虑到我只是执行单独的一个脚本,不需要进行数据交换,也不需要在C++工程中调用python中的函数,那就用最简单直接的方法解决问题吧,就是我在上面说到的方法。

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

如果有效伙伴也遇到了上面的问题,并且最终解决了,请指教,哈哈。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/252270.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

运行imgui例程

背景:目前在做一个视觉测试系统,需要做一个界面,将相机获取的图像,以及测试过程中的数据呈现在界面上,在我印象里,做界面就用qt吧,直到这个月真要开始做界面了,我的领导给我建议用im…

性能测试总结(三)--工具选型篇

性能测试总结(三)--工具选型篇 本篇文章主要简单总结下性能测试工具的原理以及如何选型。性能测试和功能测试不同,性能测试的执行是基本功能的重复和并发,需要模拟多用户,在性能测试执行时需要监控指标参数,同时性能测试的结果不是…

创建一个最简单的imgui测试用例

在上一篇文章中,我们初步认识了一下imgui,并且成功运行了他提供的demo。这只是开始学习imgui的第一步,在实际使用时,我们需要将imgui应用到自己的工程中去,所以你需要具备将imgui加到你工程中去的能力,简单起见&#x…

idea中maven的setting.xml的配置

2019独角兽企业重金招聘Python工程师标准>>> <?xml version"1.0" encoding"UTF-8"?> <settings xmlns"http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance&qu…

[精华][推荐]SSO CAS单点登录框架学习 搭建详细步骤及源码

1.了解单点登录 SSO 主要特点是: SSO 应用之间使用 Web 协议(如 HTTPS) &#xff0c;并且只有一个登录入口. SSO 的体系中有下面三种角色: 1) User(多个) 2) Web 应用(多个) 3) SSO 认证中心(一个) 2.SSO 实现包含以下三个原则 1) 所有的登录都在 SSO 认证中心进行。 2) SS…

电脑下载的M4A格式文件怎么转换为MP3格式

M4A文件格式并不是一个家喻户晓的名字&#xff0c;与&#xff2d;&#xff30;&#xff13;格式相比&#xff0c;知名度远远落后。但是&#xff0c;这并不意味着它无关紧要&#xff0c;有时候我们下载的音乐可能就是M4A格式的&#xff0c;如果换一个设备播放可能就会出现格式不…

python-for循环

一、功能 for 循环提供了python中最强大的循环结构&#xff08;for循环是一种迭代循环机制&#xff0c;而while循环是条件循环&#xff0c;迭代即重复相同的逻辑操作&#xff0c;每次操作都是基于上一次的结果&#xff0c;而进行的&#xff09; Python for循环可以遍历任何序列…

KindEditor

1、进入官网 2、下载 官网下载&#xff1a;http://kindeditor.net/down.php 3、文件夹说明 ├── asp asp示例 ├── asp.net asp.net示例 ├── attached 空文件夹&#xff0c;放置关联文件attached ├── …

使用realsense t265测试svo2.0视觉里程计

毕业三年了&#xff0c;现在是第二份工作&#xff0c;第一份工作已经结束一年半了&#xff0c;这意味着&#xff0c;我有一年半的时间没有搞视觉SLAM相关的东西了&#xff0c;虽然在第二份工作也是做视觉相关的&#xff0c;但是只是用到一些目标识别和跟踪的知识&#xff0c;并…

面试必问之JVM原理

1&#xff1a;什么是JVM JVM是Java Virtual Machine&#xff08;Java虚拟机&#xff09;的缩写&#xff0c;JVM是一种用于计算设备的规范&#xff0c;它是一个虚构出来的计算机&#xff0c;是通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机包括一套字节码指令…

InfluxDB学习之InfluxDB的基本操作

InfluxDB提供类SQL语法&#xff0c;如果熟悉SQL的话会非常容易上手。本文就为大家介绍一下InfluxDB的基本操作。 InfluxDB提供类SQL语法&#xff0c;如果熟悉SQL的话会非常容易上手。 一、InfluxDB操作方式 InfluxDB提供三种操作方式&#xff1a; 1&#xff09;客户端命令行方式…

DOS Network一月项目月报

欢迎大家阅读DOS Network第一期项目月报&#xff01;DOS为了跟大家更好的沟通和交流&#xff0c;将在每个月为大家跟进DOS Network项目进展月报。月报主要分为项目研发和社区及营销两个部分。 如果你是刚认识DOS Network预言机网络的新朋友&#xff0c;欢迎查阅往期文章&#x…

lsof详解

from:https://www.cnblogs.com/the-study-of-linux/p/5501593.html lsof (list open files)是一个列出当前系统打开文件的工具。在linux系统环境下&#xff0c;任何事物都可以以文件形式存在&#xff0c;通过文件不仅可以访问常规的数据&#xff0c;还可以访问网络连接和硬件。…

ros rviz显示rosbag中的图像和imu数据

一、rosbag相关的指令 1. rostopic list //列举出系统中正在发布的ros 话题 2. rosbag record -a //录制系统中所有正在发布的ros 话题 3. rosbag record topic1 topic2 .... -o bagname.bag 4. rosbag play bagname.bag //播放bag文件 5. rosbag info bagname.bag //查看…

day1||python

测试题&#xff1a; 0. Python 是什么类型的语言&#xff1f; Python是一种面向对象、解释型、动态类型计算机程序设计语言解释型&#xff1a;程序无需编译成二进制代码&#xff0c;而是在执行时对语句一条一条编译动态类型&#xff1a;在程序执行过程中&#xff0c;可以改变变…

2.7万字还原行业面貌,《2019 AI金融风控行业研究报告》正式上线!...

在金融科技领域&#xff0c;风险控制的重要性&#xff0c;从其关联的金融业务和结合的技术维度可见一斑&#xff1a;风控涉及信用借贷、保险、支付、供应链金融等场景&#xff0c;并运用了包括生物特征识别、机器学习、自然语言处理、大数据、云计算等多项技术。 区别于美国有…

cs堡垒机使用说明

一、堡垒机介绍 为了保证机房的网络安全&#xff0c;IDC内所有服务器不被允许从办公网直接ssh登录&#xff0c;必须通过跳板机进行间接登录。用户通过跳板机执行的所有命令&#xff08;包括通过跳板机登录的其他机器后的命令&#xff09;都会被保存并审计。 cs是我们登录IDC服…

koa中间件机制详解

转自&#xff1a;https://cnodejs.org/topic/58fd8ec7523b9d0956dad945 koa是由express原班人马打造的一个更小、更富有表现力、更健壮的web框架。 在我眼中&#xff0c;koa的确是比express轻量的多&#xff0c;koa给我的感觉更像是一个中间件框架&#xff0c;koa只是一个基础的…

如何构建一个真实的推荐系统?

AI 前线导读&#xff1a;随着互联网行业的井喷式发展&#xff0c;数据规模呈现爆炸式增长。大数据中蕴含了巨大的价值&#xff0c;但同时也来了很 “信息过载” 的问题。推荐系统作为一个广泛应用的信息过滤系统&#xff0c;在很多领域取得了巨大的成功。在电子商务上&#xff…

volatile的适用场景

介绍 把代码块声明为 synchronized&#xff0c;有两个重要后果&#xff0c;通常是指该代码具有 原子性&#xff08;atomicity&#xff09;和 可见性&#xff08;visibility&#xff09;。 原子性意味着个时刻&#xff0c;只有一个线程能够执行一段代码&#xff0c;这段代码通过…