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 ...
随机推荐
- Linux下查找大文件,大目录的方法
查找大文件 //列举出当前目录所有大于800M的文件 find . -type f -size +800M 1 2 第一个方法只用到了一个命令find,它能够帮我们做一些文件查找的操作.它常用的参数有 ...
- Redis之Python 使用 Redis
Python 使用 Redis 参考文档: http://redis.cn/clients.html#python https://github.com/andymccurdy/redis-py 安装 ...
- Gym - 100712D Alternating Strings
http://codeforces.com/gym/100712/attachments 题意: 给出一个01串,现在要切割这个01串,使得每个子串长度都不大于k,并且每个子串不能01交替出现,单个字 ...
- Hive安装-windows(转载)
1.安装hadoop 2.从maven中下载mysql-connector-java-5.1.26-bin.jar(或其他jar版本)放在hive目录下的lib文件夹 3.配置hive环境变量,HIV ...
- (CLR via C#学习笔记)线程基础
一 使用线程的理由 1.可响应性(通常是对于客户端GUI应用程序);2.性能,多个CPU(或多核CPU)能并发执行多个线程,同时执行多个操作能提升性能. 二 线程开销 线程有空间(内存耗用)和时间(运 ...
- [转]Cryengine渲染引擎剖析
转篇Napoleon314 大牛的分析,排版好乱,见谅,耐心读,这是个好东西,注意看他自己的实现,是个技术狂人啊,Ogre焕发次时代的光芒啊~~~努力 ------------------------ ...
- Java网络编程学习A轮_04_TCP连接异常
参考资料: https://huoding.com/2016/01/19/488 示例代码: https://github.com/gordonklg/study,socket module A. C ...
- HttpRequest中常见的四种ContentType
https://www.cnblogs.com/xiaozong/p/5732332.html
- Pave the Parallelepiped CodeForces - 1007B (计数)
大意: 给定A,B,C, 求有多少个三元组$(a,b,c)$, 满足$a \le b \le c$, 且以若干个$(a,b,c)$为三边的长方体能填满边长(A,B,C)的长方体. 暴力枚举出$A,B, ...
- Lua 中的 function、closure、upvalue
Lua 中的 function.closure.upvalue function,local,upvalue,closure 参考: Lua基础 语句 lua学习笔记之Lua的function.clo ...