vivado跑完发邮件

news2024/12/24 20:24:24

前言

vivado 综合+实现要跑好长时间,耍会儿手机不过分吧。然而我不想时不时抬头看有没有跑完,于是产生了该脚本

一. QQ邮箱配置

参考:https://blog.csdn.net/qq_40608730/article/details/104904398?spm=1001.2014.3001.5502
(注:网易邮箱等也可以配置)
首先按下面三张图开启SMTP服务,开启后会出现一个授权码,请牢记这个邮箱授权码,后面也会用到
请添加图片描述
请添加图片描述

在这里插入图片描述

二. Python脚本

我用的是python 3.9.12,应该不需要额外安装包
我使用的Vivado版本为Vivado2020.2
下面脚本需要修改的变量有:

1. QQ发送邮箱:my_sender
2. QQ发送邮箱的授权码:my_pass
3. QQ接收邮箱:my_user,因为我是自己发给自己也能收到,所以my_suer = my_sender
4. vivado的runs路径,如果工程路径为xxx\project_1,那么runs的路径为xxx/project_1\project_1.runs
5. 变量SYN,应该不需要更改,但是SYN=r’\synth_2’的情况还是有的
6. 变量IMP,应该也不需要更改,但是IMP=r’\impl_2`的情况也还是有的
7.时间问题,主要有两个时间,一个是函数vivado_run_over()里的50秒,还有一个是代码最后一行的5秒。不改的话问题应该不大,我的工程是没有50秒就跑完的

# coding=utf-8
import time
import os
import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr
 

 
def mail(title,message,mail_sender,mail_pass,mail_user):
    ret=True
    try:
        #msg=MIMEText('填写邮件内容','plain','utf-8')
        mail_msg = message
        msg = MIMEText(mail_msg, 'html', 'utf-8')
        msg['From']=formataddr(["Project",mail_sender])  # 括号里的对应发件人邮箱昵称、发件人邮箱账号
        msg['To']=formataddr(["nothing",my_user])        # 括号里的对应收件人邮箱昵称、收件人邮箱账号
        msg['Subject']=title                            # 邮件的主题,也可以说是标题
        
        '''
        QQ邮箱使用下面这种方式才成功
        '''
        server=smtplib.SMTP_SSL("smtp.qq.com", 465)  # 发件人邮箱中的SMTP服务器,端口是465,固定的,不能更改
        server.login(mail_sender, mail_pass)         # 括号中对应的是发件人邮箱账号、邮箱密码
        server.set_debuglevel(1)
        server.sendmail(mail_sender,[mail_user,],msg.as_string())  # 括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件
        server.quit()  # 关闭连接
    except Exception as err:  # 如果 try 中的语句没有执行,则会执行下面的 ret=False
        print(err)
        ret=False
    return ret 

def vivado_run_over(vivado_runs,fold):
    file_path = vivado_runs + fold
    file_path = file_path + r'\runme.log'
    #print(file_path)
    if os.path.exists(file_path):
        file_time = os.path.getmtime(file_path)
        now_time  = time.time()
        interval = timeMinus(file_time,now_time)
        if(interval < 50):#假设至少50秒跑完synthesis 或 implementation
            if(get_vivado_state(file_path)):
                print("send email")
                flag = True
            else:
                flag = False
        else:
            #print("continue\n")
            flag = False
    else:
        flag = False
    return flag

def timeMinus(time1,time2):
    interval = int(abs(time1-time2))
    return interval

def delay(DELAY):
    time.sleep(DELAY) #seconds
    print("delay " + str(DELAY) + " seconds\n")

def get_vivado_state(file_name):
    status = False
    with open (file_name,'r') as rf:
        line = rf.readlines()[-1]
        if line.count('Exiting Vivado'):
            status = True
        else:
            status = False
    return status

my_sender='xxxxxxxx@qq.com'    # 发件人邮箱账号
my_pass = 'xxxxxxxx'     # 发件人邮箱授权码,第一步得到的
my_user=my_sender                # 收件人邮箱账号,可以发送给自己
title_syn= 'Synthesis 跑完了'
title_imp= 'Implementation 跑完了'
message ="""
        <p>Vivado 提醒警告...</p>
        """
vivado_runs = r'xxxxx\project_1\project_1.runs'

if __name__ == "__main__": 
    SYN = r'\synth_1'
    IMP = r'\impl_1'
    just_syn = True
    just_imp = True
    while(True):
        if(just_syn  and vivado_run_over(vivado_runs,SYN)):
            if(mail(title_syn,message,my_sender,my_pass,my_user)):
                print("Synthesis 邮件发送成功")
                just_syn = False
                break
            else:
                print("Synthesis 邮件发送失败")
                break
        elif(just_imp and vivado_run_over(vivado_runs,IMP)):
            if(mail(title_imp,message,my_sender,my_pass,my_user)):
                print("Implementation 邮件发送成功")
                just_imp = False
                break
            else:
                print("Implementation 邮件发送失败")
                break
        else:
            if((not just_syn) and (not just_imp) ):
                break
            delay(5) #延迟5秒

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

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

相关文章

c++11特性(2)

目录 1.新增了两个默认成员函数 2.新增了几个关键字 3.可变参数模板 1.新增了两个默认成员函数 a.移动构造函数 b.移动赋值运算符重载 默认生成的前提条件&#xff1a;没有实现析构函数&#xff0c;拷贝构造&#xff0c;拷贝赋值重载中的任意一个。 为什么要实现移动的版…

三菱PLC单轴运动控制

1、什么是运动控制 ​ 运动控制&#xff0c;也可叫做电力拖动控制&#xff1b;它是自动化的一个分支&#xff0c;其动力源大部分都基于电动机。 也就是说&#xff0c;运动控制其实是基于电动机&#xff0c;实现物体对于角位移、速度、转矩等物理量改变的控制。 这里面&#xf…

Linux开发工具(2)——vim

文章目录多模式编辑器——vimvim的基本操作命令模式&#xff08;Normal mode&#xff09;插入模式&#xff08;Insert mode&#xff09;底行模式&#xff08;Last line mode&#xff09;vim的基本配置原理配置sudoers文件多模式编辑器——vim vim是一种多模式编辑器&#xff0c…

MYSQL语法一:创建表和查看表的所有列和所有数据库等

前言&#xff1a;接下里&#xff0c;我们即将开启mysql的旅行之路。首先是它的基础知识 1.mysql的基本知识点 mysql是客户端加服务器的模式。 客户端给服务器发送的数据称为请求request 服务器给客户端返回的数据称为响应response 客户端和服务器可以在不同主机上&#xff0c;…

轻松学习jQuery事件和动画

✅作者简介&#xff1a;热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏&#xff1a;前端开发者…

计算机网络-网络层详细讲解(持续更新中)

网络层概述 网络层的主要任务是实现网络互连&#xff0c;进而实现数据包在各网络之间的传输。 要实现网络层主要任务&#xff0c;需要解决以下主要问题&#xff1a; 网络层向运输层提供怎样的服务&#xff08;“可靠传输”还是“不可靠传输‘&#xff09;网络层寻址问题路由…

小啊呜产品读书笔记001:《邱岳的产品手记-04》第07+08讲 关于需求变更

小啊呜产品读书笔记001&#xff1a;《邱岳的产品手记-04》第0708讲 关于需求变更一、今日阅读计划二、泛读&知识摘录1、07讲 关于需求变更&#xff08;上&#xff09;&#xff1a;需求背后的需求2、08讲 关于需求变更&#xff08;下&#xff09;&#xff1a;化变更于无形三…

【Pytorch with fastai】第 14 章 :ResNet

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

自动化测试selenium在小公司的成功实践

前言 可能提到自动化测试selenium&#xff0c;大家都会想到用python语言来编写脚本。但我们选择了java语言&#xff0c;因为我相信大部分公司java程序员比python程序员多得多。而对于很多测试人员&#xff0c;并不能熟练使用编程语言&#xff0c;所以他们需要别人指导。与其使…

iOS 16.2 的7个惊人变化

看起来 iOS 16 正在不断扩展 你已经知道 iOS 16 和 iOS 16.1 有多么不可思议。所以我认为下一次更新已经没有多少了——iOS 16.2。 Apple 刚刚通过 iOS 16.2 Developer Beta 1 消除了这些信念。 Developer Beta 2 中还有 7 个变化。相信我,它们也很棒。 #1、锁定屏幕的药物…

qemu创建linux虚拟机(亲测有效,virt-manger方式)

1&#xff0c;网桥的搭建 Bridge方式原理 Bridge方式即虚拟网桥的网络连接方式&#xff0c;是客户机和子网里面的机器能够互相通信。可以使虚拟机成为网络中具有独立IP的主机。 桥接网络&#xff08;也叫物理设备共享&#xff09;被用作把一个物理设备复制到一台虚拟机。网桥多…

Chrome 扩展教程之如何使用 React 构建 Chrome 扩展(教程含源码)

创建自己的 Chrome 扩展程序比许多人想象的要容易。这很有趣。我们可以尽情发挥我们的创造力,根据需要修改每个网站。 在本文中,我将首先向您展示如何设置 Chrome 扩展程序。之后,我们将设置一个 React 应用程序并将其加载到任何网站上。 设置 在我们开始之前,让我们在我…

对称加密和非对称加密

对称加密 加密和解密时使用的是同一个秘钥&#xff0c;这种加密方法称为对称加密&#xff0c;也称为单密钥加密。 优点&#xff1a;算法公开、计算量小、加密速度快、加密效率高。 缺点&#xff1a;如果一方的秘钥被泄露&#xff0c;那么加密信息也就不安全了。 示例AES pri…

VMware Workstation中桥接模式、NAT模式、仅主机模式

一、VMware虚拟机的网络模式 VMware工作站虚拟机有三种网络模式【①桥接模式 ②NAT模式 ③仅主机模式】&#xff0c;如下图所示&#xff1a; 二、VMware虚拟机的网络模式介绍 2.0、VMware的虚拟设备 VMware的虚拟设备序号虚拟设备编号说明1VMnet0是虚拟桥接网络下的虚拟交换机…

【正点原子FPGA连载】 第二章 实验平台简介 摘自【正点原子】DFZU2EG/4EV MPSoC 之FPGA开发指南V1.0

1&#xff09;实验平台&#xff1a;正点原子MPSoC开发板 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id692450874670 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html 第二章 实验平台…

CNN (吴恩达 2021

week1-2 02_边缘检测例子_哔哩哔哩_bilibili ​ ​ 我们之前在说面部识别介绍过&#xff0c;要识别面部&#xff0c;都是从细微的边缘入手&#xff0c;一层一层聚类&#xff0c;最终实现人脸的识别。神经网络由浅层到深层&#xff0c;分别可以检测出图片的边缘特征 、局部特…

【Linux】基本指令(一)

文章目录前言操作系统简述学习指令的原因ls 指令pwd 指令cd 指令touch 指令tree 命令mkdir 指令rmdir 和 rm 指令nano 指令clear 指令whoami 指令常用键位结语前言 今天&#xff0c;我们开始 Linux 的学习。本篇博客内容为 操作系统简述、Linux 基本指令、和几个 Linux 常用键…

Wordpress 生手遇到一堆问题,反应巨慢,提速插件又是一堆错误

环境 LAMP&#xff1a;Debian&#xff0c;Apache&#xff0c;MariaDB&#xff0c;PHP 7.4 Wordpress安装几乎没有什么要求&#xff0c;几乎没有特别的设置就可以顺利安装成功&#xff0c;但随着插件的增加&#xff0c;问题就慢慢出来了。 写两页就会发现Wordpress反应巨慢&…

LiteFlow 开源编排规则引擎

osgi 让 java 系统变成模块化的形式&#xff0c;ASM 是一款修改字节码的框架&#xff0c;同类型的框架 Cglib。这些框架能加载一个 class 信息&#xff0c;Javaagent&Attach API 结合 ASM LiteFlow 的理念很简单&#xff0c;就是把系统中的各个逻辑切分成一小块一小块的&am…

XCIE-HUAWEI-PBR-MQC-引入形成的路由环路

XCIE-HUAWEI-PBR-MQC-引入形成的路由环路 首先来个测试 给你们选&#xff0c;答案选啥呢? 正确答案在结尾公布 正确答案是C 为什么呢&#xff1f; 首先&#xff0c;虽然ACL有一个齐总是拒绝的&#xff0c;但是呢&#xff0c;他两都是同一条路由 但是呢&#xff01;&#x…