python PyQt5实现vivado完成implementation后邮件提醒的demo
2021/11/25 20:11:15
本文主要是介绍python PyQt5实现vivado完成implementation后邮件提醒的demo,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
目录
- 1 功能
- 2 代码
- 2.1 介绍
- 2.2 使用
- 3 打包发布
- 4 附件
1 功能
ug904中有提到,如果要使用远程主机启动一个或多个job,选择“在远程主机上启动运行(仅Linux)”。我如果要使用另一台windows主机专门跑程序,需要开远程控制监视运行的情况或者经常去查看,为了解决这个问题,用python pyqt5实现了一个简单的demo。
实现的功能:间隔1分钟监视vivado implementation的log文件,如果发现log中有INFO: [Common 17-206] Exiting Vivado at xxx
的信息,就把之前的一些关键步骤以及搜索到的时间发送给接收的邮件地址。
2 代码
2.1 介绍
import sys import re import threading import time import win32ui import smtplib from email.mime.text import MIMEText def fun_sendmail(list_info): print("entry fun_sendmail") #设置服务器所需信息 #163邮箱服务器地址 mail_host = 'smtp.163.com' #163用户名 mail_user = '137xxxxxxxx' #密码(部分邮箱为IMAP/SMTP授权码) mail_pass = 'xxxxxxxxxxxxxx' #邮件发送方邮箱地址 sender = '137xxxxxxxx@163.com' #邮件接受方邮箱地址,注意需要[]包裹,这意味着你可以写多个邮件地址群发 receivers = ['163xxxxxxx@qq.com'] #设置email信息 #邮件内容设置 text_str = ''.join(list_info) message = MIMEText(text_str,'plain','utf-8') #邮件主题 message['Subject'] = "程序跑完啦!" #发送方信息 message['From'] = sender #接受方信息 message['To'] = receivers[0] print(message) #登录并发送邮件 try: smtpObj = smtplib.SMTP() #连接到服务器 smtpObj.connect(mail_host,25) #登录到服务器 smtpObj.login(mail_user,mail_pass) #发送 smtpObj.sendmail( sender,receivers,message.as_string()) #退出 smtpObj.quit() print('success') except smtplib.SMTPException as e: print('error',e) def fun_serch_keyword(path): print("entry fun_serch_keyword") global list_info file = open(path, mode = 'r') info_index = 0 info_num = len(list_info) time_str = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) line = file.readline() while line: line = file.readline() if(re.findall('Starting|Ending|Exiting', line)): info_index += 1 if info_index > info_num: list_info.append(time_str+'\t'+line) print(line) if(re.findall('Exiting', line)): fun_sendmail(list_info) sys.exit(0) file.close() def fun_timer(): print("entry fun_timer") fun_serch_keyword(impl_runme_log_path) global timer timer = threading.Timer(60, fun_timer) timer.start() list_info = [] dlg = win32ui.CreateFileDialog(1) dlg.SetOFNInitialDir('') dlg.DoModal() impl_runme_log_path = dlg.GetPathName() print(impl_runme_log_path) timer = threading.Timer(1, fun_timer) timer.start()
程序逻辑:
- 打开文件对话框,选择runme.log文件的路径。
- 嵌套例化60s计时器,每隔60s完成一次runme.log文件的关键词查找。
- 保存含有"Starting|Ending|Exiting"的信息。
- 如果有"Exiting"关键词的信息,则发送邮件。
- 将关键词的信息一起发送给接收邮箱。
将邮箱信息改成自己的即可使用。环境:
- Python 3.8.8
- PyQt5
2.2 使用
这里测试了163邮箱,获得IMAP/SMTP授权码的步骤:
3 打包发布
为了方便没有安装环境的主机使用,使用PyQt5写了一个界面,然后打包了一下,由于本人也是小白,所以程序可能有很多bug,目前仅测试过几次。程序介绍如下:
- 邮箱授权码使用AES算法加密,其实自己用不加密也行,为了学习python加了一下。
- 参数存储使用QSettings实现,存储在运行文件的路径下的“config.ini”中。如果第一次运行,需要输入参数,之后就会自动加载的,其中只有授权码是加密的。
- 运行逻辑
- 首先点击
选择路径
选择当前implementation的路径 - 点击
开始
,会将参数存储起来,并且查询一下选择的路径下有没有runme.log,如果没有就新建一个空白文档。因为如果没跑过implementation,或者刚开始跑的时候是没有的。 - 如果已经有了日志文件无法新建了说明已经开始跑了,这时就直接开始每隔60s查询其中的关键词。
- 如果查询到exiting vivado,则发送邮件。邮件的内容如下:
- 首先点击
4 附件
链接:https://pan.baidu.com/s/1ZRkBG-hMbQsAxd2MpetpXQ
提取码:open
这篇关于python PyQt5实现vivado完成implementation后邮件提醒的demo的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-24Python编程基础详解
- 2024-11-21Python编程基础教程
- 2024-11-20Python编程基础与实践
- 2024-11-20Python编程基础与高级应用
- 2024-11-19Python 基础编程教程
- 2024-11-19Python基础入门教程
- 2024-11-17在FastAPI项目中添加一个生产级别的数据库——本地环境搭建指南
- 2024-11-16`PyMuPDF4LLM`:提取PDF数据的神器
- 2024-11-16四种数据科学Web界面框架快速对比:Rio、Reflex、Streamlit和Plotly Dash
- 2024-11-14获取参数学习:Python编程入门教程