ug904中有提到,如果要使用远程主机启动一个或多个job,选择“在远程主机上启动运行(仅Linux)”。我如果要使用另一台windows主机专门跑程序,需要开远程控制监视运行的情况或者经常去查看,为了解决这个问题,用python pyqt5实现了一个简单的demo。
实现的功能:间隔1分钟监视vivado implementation的log文件,如果发现log中有INFO: [Common 17-206] Exiting Vivado at xxx
的信息,就把之前的一些关键步骤以及搜索到的时间发送给接收的邮件地址。
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()
程序逻辑:
将邮箱信息改成自己的即可使用。环境:
这里测试了163邮箱,获得IMAP/SMTP授权码的步骤:
为了方便没有安装环境的主机使用,使用PyQt5写了一个界面,然后打包了一下,由于本人也是小白,所以程序可能有很多bug,目前仅测试过几次。程序介绍如下:
选择路径
选择当前implementation的路径开始
,会将参数存储起来,并且查询一下选择的路径下有没有runme.log,如果没有就新建一个空白文档。因为如果没跑过implementation,或者刚开始跑的时候是没有的。链接:https://pan.baidu.com/s/1ZRkBG-hMbQsAxd2MpetpXQ
提取码:open