python 实例

来源:互联网 发布:java 获取系统字符集 编辑:程序博客网 时间:2024/06/02 20:55
#!/usr/bin/python#coding=gbkimport reimport sysimport subprocessimport osclass Mytool:        #根据文件名读取文件内容        def getFileContent(self,filepath):                if(os.path.exists(filepath)==False):                        return -1                else:                        content=''                        #print filepath                        f=file(filepath,'r')                        try:                                while True:                                        line=f.readline()                                        content=content+line                                        if len(line)==0:                                                break                        finally:                #print line                                f.close()                        #print 'line',line                        return content        #根据提供的字符串内容及正则返回需要截取的单个结果        def getRexReturn(self,rex,content):                p=re.compile(rex)                iter=p.finditer(content)                for m in iter:                        res=m.group()                        #print res                return res         #根据提供的字符串内容及正则返回需要截取的多个结果        def getRexReturnList(self,rex,content):                res=[]                p=re.compile(rex)                iter=p.finditer(content)                for m in iter:                        res.append(m.group())                        #print m.group()                #print res                return res        #获得部署说明获取作者UM帐户        def getWriteUM(self,content):                #p=re.compile(r'(作者\s([\S]+})\s)')                #p=re.compile(r'((?:作者\s+)(\S)+)')                p=re.compile(r'((?<=作者  )(\S)+(?=\s))')                iter=p.finditer(content)                writerList=[]                for m in iter:                        #print "m" ,m.group(1)                        writerList.append(m.group(1))                print writerList                return writerList        def getWriteUMEmailList(self,content):                emailList=''                p=re.compile(r'((?<=作者  )(\S)+(?=\s))')                emailList=p.findall(content)                print emailList        #根据提供的文件名返回版本信息        def getRdinfo(self,rdinfo):                rdinfocontent=''                content=self.getFileContent(rdinfo)                print content                if (content==-1):                        #/wls/deployop/versions/storage/isv2_db_2.15.0_standard/dist_stg_autod_1                        path=os.getcwd()                        rex='(?<=storage/)(.*?)(?=_standard)'                        p=re.compile(rex)                        returnlist=p.findall(path)                        rdinfocontent=returnlist[0].upper()                        #print rdinfocontent                else:                        titlerex=r'((?<=headline=)(\S)+)'                        title=self.getRexReturn(titlerex,content)                        rdrex=r'((?<=rdid=)(\S)+)'                        rd=self.getRexReturn(rdrex,content)                        testenv2rex=r'((?<=testenv2=)(\S)+)'                        testenv2=self.getRexReturn(testenv2rex,content)                        developerrex=r'((?<=developer=)(\S)+)'                        developer=self.getRexReturn(developerrex,content)                        rddaterex=r'((?<=rddate=)(\S)+)'                        rddate=self.getRexReturn(rddaterex,content)                        prd_planbegindaterex=r'((?<=prd_planbegindate=)(\S)+)'                        prd_planbegindate=self.getRexReturn(prd_planbegindaterex,content)                        pwdpath=os.getcwd()                        rdinfocontent="===========版本信息beigin==================================\n\n"                        rdinfocontent=rdinfocontent+rd+' '+title+'\n'+'部署环境'+testenv2+'\n'+'开发人员:'+developer+'\n'                        rdinfocontent=rdinfocontent+'版本移交时间:'+rddate+'\n'+'生产计划发布时间:'+prd_planbegindate+'\n\n'+pwdpath                        rdinfocontent=rdinfocontent+"\n==========版本信息end======================================="                return rdinfocontent        def sendmail(self,sender,receiver,subject,message):                '''                dsendmail --help                Usage: dsendmail -s SUBJECT {-m MESSAGE|-f FILE} --to RECIPCIENTS [OPTION]...                -s, --subject      指定主题                -m, --message      指定邮件内容                -f, --file         从文件中读取邮件内容                --to           指定收件人,以逗号分隔,下同                --cc           指定抄送址                --bcc                          -a, --attach       指定附件位置,以逗号分隔                -c, --content-type text/html或text/plain,缺省时根据内容判断                --from         发件人,
                --smtp         smtp服务器地址,默认为
                --help         显示本信息                '''                cmdargs='/wls/deploysys/tools/dsendmail '                cmdargs=cmdargs+' -s ' +'"'+subject+'"' +' -m '+'"'+ message +'"'+ ' --from ' +'" '+ sender +' "'+ ' --to '+'" '+receiver+' "'                print cmdargs                cmdargs=cmdargs+' -a '+' -c '+ 'text/plain'                print cmdargs                p=subprocess.call(cmdargs,shell=True)                if(p==0):                        print 'sendmail success'                else:                        print 'sendmail fail'        def getDcheckContent(self):                cmdargs='deploytool dcheck'                dcheckContent='本次执行结果汇总如下,详见日志\n\n'                dcheckContent+=subprocess.Popen(cmdargs,shell=True,stdout=subprocess.PIPE).communicate()[0]                #print dcheckContent                #dcheckContent=subprocess.call(cmdargs,shell=True)                where=dcheckContent.find('log个数')                dcheckContent=dcheckContent[where+12:]                dcheckContent+="\n 如下为对应的日志\n"                dcheckContent=dcheckContent.replace('[1m','')                dcheckContent=dcheckContent.replace('[0m','')                dcheckContent=dcheckContent.replace('[32m','')                dcheckContent=dcheckContent.replace('[31m','')                dcheckContent=dcheckContent.replace('[33m','')                dcheckContent=dcheckContent.replace('[ ','')                dcheckContent=dcheckContent.replace('>>','')                return dcheckContent        #dcheck内容分析                 def getErrorSqlLog(self):                #s=self.getFileContent('ccc.txt')                s=self.getDcheckContent()                errorlogContent=''                str1='.sql'                str1sqlList =[]                if(str1 in s):                        #1: ./dml/gbs/sr_pa02461797_74_gbspkg_dml_guozhengmin961_gbs.sql                        str1rex=r'([\S]+sql)'                        str1sqlList=self.getRexReturnList(str1rex,s)                        #print str1                 str2='.run'                str2sqlList=[]                if(str2 in s):                        str2rex=r'([\S]+run)'                        str2sqlList=self.getRexReturnList(str2rex,s)                        #print str2 +':'                         #print str2sqlList                          str2Alllogcontent=''                        for f in str2sqlList:                                logcontent='==========================================================\n'                                logcontent=logcontent+f+'日志如下\n'                                logcontent=logcontent+'==========================================================\n'                                logcontent=logcontent+self.getFileContent(f)                                str2Alllogcontent=str2Alllogcontent+"正在执行或因故处于执行状态的脚本日志汇总如下:\n\n"+logcontent                        #print str2Alllogcontent                        errorlogContent=errorlogContent+str2Alllogcontent                str3='.fail'                str3sqlList=[]                if (str3 in s):                        str3rex=r'([\S]+fail)'                        str3sqlList=self.getRexReturnList(str3rex,s)                        #print str3+':'                        str3Alllogcontent=''                        #print str3sqlList                        for f in str3sqlList:                                logcontent='==========================================================\n'                                logcontent=logcontent+f+'日志如下\n'                                logcontent=logcontent+'==========================================================\n'                                logcontent=logcontent+self.getFileContent(f)                                str3Alllogcontent=str3Alllogcontent+logcontent                        #print str3Alllogcontent                                errorlogContent=errorlogContent+"执行失败的脚本如下:\n\n"+str3Alllogcontent                str4='.suc'                str4sqlList=[]                if (str4 in s):                        str4rex=r'([\S]+suc)'                        str4sqlList=self.getRexReturnList(str4rex,s)                        #print str4+':'                        str4Alllogcontent=''                        for f in str4sqlList:                                logcontent='==========================================================\n'                                logcontent=logcontent+f+'日志如下\n'                                logcontent=logcontent+'==========================================================\n'                                logcontent=logcontent+self.getFileContent(f)                                str4Alllogcontent=str4Alllogcontent+"有执行成功但报错的脚本汇总日志如下 :\n\n"+logcontent                        errorlogContent+=str4Alllogcontent                #print errorlogContent                return errorlogContentmytool=Mytool()print mytool.getFileContent('rdinfos');#rdinfos=mytool.getRdinfo('rdInfo.txt')dcheckContent=mytool.getDcheckContent()ErrorSqlLog=mytool.getErrorSqlLog()#msg=rdinfos+'\n'+ErrorSqlLog#content=mytool.getFileContent("egis.html")#titlerex=r'((?<=headline=)(\S)+)'#print writer.getRexReturn(titlerex,'headline=第1次移交--常规版本 EIM-RSTP-DB1.0.0')#print "content:",content#print mytool.getWriteUM(content)rdinfos=mytool.getRdinfo('rdInfo.txt')print rdinfosmsg="'"+rdinfos+"\n"+dcheckContent+ErrorSqlLog+"'"mytool.sendmail('***@163.com',***@163.com','sendmail test',msg)#print mytool.getDcheckContent()#print msg                                  

原创粉丝点击