zoukankan      html  css  js  c++  java
  • 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+"
    ")
    
        #每次移除一个任务后,更新清单文件
        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', '25')
            #登录
            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)
  • 相关阅读:
    区块链匿名资产的发行原理
    14亿条记录,12c 做不到2小时内变更表结构字段类型?
    MySQL修改有存量数据的数据库字符集实战
    Linux之HugePages快速配置
    快手大数据架构师:实时OLAP分析平台这么做,才可能超越抖音
    Oracle 12c 能否在2小时内完成一张14亿条记录的表结构字段类型变更
    Redis NoSQL
    对python virtualenv虚拟环境的理解
    16、SpringBoot------整合MapStruct
    16、SpringBoot------整合MapStruct
  • 原文地址:https://www.cnblogs.com/jiangzhaowei/p/9278416.html
Copyright © 2011-2022 走看看