vivado跑完发邮件

前言

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

一. QQ邮箱配置

参考:https://blog.youkuaiyun.com/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
#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秒就跑完的

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秒
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Greate AUK

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值