Python 定期检查Build_setting的编译情况
#!/usr/bin/python
#_*_ coding:utf-8 _*_ import time
from email.MIMEText import MIMEText
from email.MIMEMultipart import MIMEMultipart
from email.MIMEBase import MIMEBase
from email import Utils, Encoders
from email.header import Header
import mimetypes
import sys
import smtplib
import getopt
import os
import re
import shutil
import time, datetime '''
脚本功能:
(1)检查所有的builting_setting.h是否能够编译通过,并将编译结果写入 buildLog文件中。
(2)将编译结果通过邮箱发送给负责人。
(3)系统定期执行任务,检查build_setting。
注意:SRC的绝对路径更新:gPathSrc
''' gPathSrc = u"/home/kk/share/bak/512_new/code"
gPathBuildList = gPathSrc + u"/kitking/buildList.h"
gPathBuildLog = gPathSrc + u"/kitking/buildLog.h" def SearchbinFile(curBuildName):
global gPathSrc
binFilepath = gPathSrc + "/mergedir"
IsFindfile = 0 for filename in os.listdir(binFilepath):
if (re.search(".*RR.*\.bin.*",filename)):
IsFindfile = 1
break
else:
IsFindfile = 0
if IsFindfile == 0:
if (os.path.isfile(gPathBuildList)):
open(gPathBuildLog, "a").writelines(curBuildName)
else:
open(gPathBuildLog, "w").writelines(curBuildName) def Compile():
buildList = []
strCurBuildName = ""
#查看清单文件
if(os.path.isfile(gPathBuildList)):
buildList = open(gPathBuildList, "r").readlines() #无清单任务,需要重新产生
if(len(buildList) == 0):
for dirPath, dirNames, fileNames in os.walk(gPathSrc + "/../BUILD_RECORD"):
for strCurBuildName in dirNames:
buildList.append(strCurBuildName+"\n") #每次移除一个任务后,更新清单文件
if(len(buildList)):
strCurBuildName = buildList.pop()
open(gPathSrc + "/../BUILD_RECORD/BUILD_NOW.h", "w").write("#define BUILD_NAME " + strCurBuildName)
os.system(gPathSrc + "/build_history.sh")
SearchbinFile(strCurBuildName) if (len(buildList)):
open(gPathBuildList, "w").writelines(buildList)
else:
# 注意:附件的路径字符串应为unicode编码
# 发送者邮箱 接收者邮箱 邮箱密码 主题 内容 附件名
SendMail('rad_xxx@163.com', 'xxx@163.com', 'xxx','编译结果','请查看Log!',gPathBuildLog)
os.remove(gPathBuildLog)
os.remove(gPathBuildList) def SendMail(fromAddress, toAddress, usepassword,subject=None, content=None, attfile=None, \
subtype='plain', charset='utf-8'): username = fromAddress #创建一个带附件的实例
msg = MIMEMultipart()
msg['From'] = fromAddress
msg['To'] = toAddress if subject:
#标题
msg['Subject'] = subject
msg['Date'] = Utils.formatdate(localtime=1) if content:
#添加邮件内容
txt = MIMEText(content, subtype, charset)
msg.attach(txt) if attfile:
#构造附件
#注意:传入的参数attfile为unicode,否则带中文的目录或名称的文件读不出来
# basename 为文件名称,由于传入的参数attfile为unicode编码,此处的basename也为unicode编码
basename = os.path.basename(attfile)
#print basename
#注意:指定att的编码方式为gb2312
att = MIMEText(open(attfile, 'rb').read(), 'base64', 'gb2312')
att["Content-Type"] = 'application/octet-stream' #注意:此处basename要转换为gb2312编码,否则中文会有乱码。
# 特别,此处的basename为unicode编码,所以可以用basename.encode('gb2312')
# 如果basename为utf-8编码,要用basename.decode('utf-8').encode('gb2312')
att["Content-Disposition"] = 'attachment; filename=%s' % basename.encode('gb2312')
msg.attach(att) try:
#smtp = smtplib
smtp = smtplib.SMTP() #连接服务器
smtp.connect('smtp.163.com', '')
#登录
smtp.login(username, usepassword)
#发送邮件
smtp.sendmail(fromAddress, toAddress, msg.as_string())
#退出
smtp.quit()
print('邮件发送成功email has send out !')
except Exception as e:
print str(e) if __name__ == "__main__":
#获取脚本所在的绝对路径
AbsolutePath = sys.path[0]
#切换目录进行编译
os.chdir(gPathSrc)
#编译
Compile()
#sys.exit(1)
Python 定期检查Build_setting的编译情况的更多相关文章
- python如何调用c编译好可执行程序
python如何调用c编译好可执行程序 以下总结出几种在Python 中调用 C/C++ 代码的方法 ------------------------------------------- ...
- Python 语言特性:编译+解释、动态类型语言、动态语言
1. 解释性语言和编译性语言 1.1 定义 1.2 Python 属于编译型还是解释型? 1.3 收获 2. 动态类型语言 2.1 定义 2.2 比较 2. 动态语言(动态编程语言) 3.1 定义 3 ...
- python的exe反编译
目录 python的exe反编译 方法一.使用archive_viewer.py提取pyc 方法二.使用pyinstxtractor.py提取pyc python的exe反编译 驱动人生样本为pyth ...
- 《python解释器源码剖析》第0章--python的架构与编译python
本系列是以陈儒先生的<python源码剖析>为学习素材,所记录的学习内容.不同的是陈儒先生的<python源码剖析>所剖析的是python2.5,本系列对应的是python3. ...
- windows平台python 2.7环境编译安装zbarlight
类似于前一篇博文,http://www.cnblogs.com/zhongtang/p/7148082.html中描述的情况. 编译zbarlight同样出现问题,简要处理步骤如下: 1.到https ...
- python介绍、安装及相关语法、python运维、编译与解释
1.python介绍 Python(英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/)是一种广泛使用的解释型.高级编程.通用型编程语言,由吉多.范罗苏姆创造,第一版发布于1991年.可以视 ...
- Python在Linux下编译安装报错:Makefile:1141:install
正常情况下执行:./configuremake && make install可以直接安装python,但是在在更新了乌版图后居然报错了!!!检查了一圈,发现乌版图安装了python3 ...
- python字典嵌套字典的情况下获取某个key的value
最近在用python写接口的测试程序,期间用到解析字典获取某个key的value,由于多个接口返回的字典格式不是固定的并存在多层嵌套的情况.在字典的方法中也没有找到可直接达到目的的方法(也可能是我对字 ...
- windows下安装python的C扩展编译环境(解决“Unable to find vcvarsall.bat”)
个人文章除注明转载外,均为个人原创或者翻译. 个人文章欢迎各种形式的转载,但请18岁以上的转载者注明文章出处,尊重我的劳动,也尊重你的智商: 本文链接:http://www.cnblogs.com/f ...
随机推荐
- 第二章 第二个spring-boot程序
上一节的代码是spring-boot的入门程序,也是官方文档上的一个程序.这一节会引入spring-boot官方文档推荐的方式来开发代码,并引入我们在spring开发中service层等的调用. 1. ...
- 定义 S4 类
S3 类仅用一个字符向量表示,与之不同的是,S4 类要求对类和方法有正式定义.为了定义一个 S4 类,我们需要调用 setClass( ),并提供一种类成员的表示,这种表示被称为字段(slots).通 ...
- android 蓝牙通信编程讲解
以下是开发中的几个关键步骤: 1,首先开启蓝牙 2,搜索可用设备 3,创建蓝牙socket,获取输入输出流 4,读取和写入数据 5,断开连接关闭蓝牙 下面是一个demo 效果图: SearchDevi ...
- vue 脚手架 (三,配置文件config, build目录)
本文以转移至本人的个人博客,请多多关注! 本文以转移至本人的个人博客,请多多关注! 本文以转移至本人的个人博客,请多多关注! 本文以转移至本人的个人博客,请多多关注! 上篇文章咱们介绍了vue web ...
- mybatis 环境搭建和基本说明
mybatis介绍就不多提了,直接步入正题. 先准备好eclipse和MySQL,然后先看一下目录结构 文件和类很少,所以mybatis的搭建是非常简单的,如搭建中遇到问题可以先参考文档最后一部分的综 ...
- 牛客网——E进阶吧阶乘
链接:https://www.nowcoder.net/acm/contest/75/E来源:牛客网 时间限制:C/C++ 3秒,其他语言6秒 空间限制:C/C++ 32768K,其他语言65536K ...
- mysql中limit的用法详解[数据分页常用]
在我们使用查询语句的时候,经常要返回前几条或者中间某几行的数据,这个时候怎么办呢?不用担心,mysql已经为我们提供了这样一个功能. SELECT * FROM table LIMIT [offset ...
- js使用post 方式打开新窗口,隐藏Url参数
要想在地址栏隐藏url传递的参数,不能直接隐藏,但有几下几个变通的方法. 使用类似Base64编码,将URL参数进行简单加密. 使用框架页; 使用POST方式传递数据; 使用Cookie传递数据; 下 ...
- XML——概述
body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...
- selenium对应三大浏览器(谷歌、火狐、IE)驱动安装
selenium:v3.7.0 一.谷歌浏览器 chromdriver.exe 根据自己谷歌浏览器版本安装对应chromedriver的版本. 我电脑谷歌版本是65的,装的v2.36版,链接:http ...