對(duì)Python 網(wǎng)絡(luò)設(shè)備巡檢腳本的實(shí)例講解
1、基本信息
我公司之前采用的是人工巡檢,但奈何有大量網(wǎng)絡(luò)設(shè)備,往往巡檢需要花掉一上午(還是手速快的話),浪費(fèi)時(shí)間浪費(fèi)生命。
這段時(shí)間正好在學(xué) Python ,于是乎想(其)要(實(shí))解(就)放(是)雙(懶)手。
好了,腳本很長(zhǎng)又比較挫,有耐心就看看吧。
需要巡檢的設(shè)備如下:
設(shè)備清單 |
設(shè)備型號(hào) |
防火墻 |
華為 E8000E |
H3C M9006 |
|
飛塔 FG3950B |
|
交換機(jī) |
華為 S9306 |
H3C S12508 |
|
Cisco N7K |
|
路由器 |
華為 NE40E |
負(fù)載 |
Radware RD5412 |
Radware RD6420 |
2、采集數(shù)據(jù)并寫(xiě)入文件
# 相關(guān)設(shè)備巡檢命令就不介紹了。。。
01DMZ-E8000E.py # 華為 E8000E 交互腳本
#!/usr/bin/env python import pexpect import sys import datetime d1=datetime.datetime.now() d3=d1+datetime.timedelta(days=-1) tdy=d3.strftime('%b %d') today=datetime.date.today().strftime('%Y%m%d') tt=tdy.split() if int(tt[-1]) < 10: tdy=tdy.replace('0',' ') ip=str(sys.argv[1]) passwd=str(sys.argv[2]) password=str(sys.argv[3]) child=pexpect.spawn('ssh 用戶(hù)名@%s'%ip) fout=file('/usr/sh/shell/linux/xunjian/'+today+'/01DMZ-E8000E.txt','w') child.logfile = fout child.expect('(?i)ssword:') child.sendline("%s"%passwd) child.expect('(?i)E8000E-1>') child.sendline("su") child.expect("(?i)assword:") child.sendline("%s"%password) child.expect("(?i)E8000E-1>") child.sendline("dis device | ex Normal") child.expect("(?i)E8000E-1>") child.sendline("dis version") index = child.expect(["(?i)---- More ----","(?i)E8000E-1>"]) if ( index == 0 ): child.send("a") child.expect("(?i)E8000E-1>") child.sendline("dis temperature") child.expect("(?i)E8000E-1>") child.sendline("dir") index = child.expect(["(?i)---- More ----","(?i)E8000E-1>"]) if ( index == 0 ): child.send("a") child.expect("(?i)E8000E-1>") child.sendline("dis memory-usage") child.expect("(?i)E8000E-1>") child.sendline("dis hrp state") child.expect("(?i)E8000E-1>") child.sendline("dis firewall session table") index = child.expect(["(?i)---- More ----","(?i)E8000E-1>"]) if ( index == 0 ): child.send("a") child.expect("(?i)E8000E-1>") child.sendline("dis ip routing-table protocol static") child.expect("(?i)E8000E-1>") child.sendline("dis int brief | in up") child.expect("(?i)E8000E-1>") child.sendline("dis acl 3004") index = child.expect(["(?i)---- More ----","(?i)E8000E-1>"]) if ( index == 0 ): child.send("a") child.expect("(?i)E8000E-1>") child.sendline("dis acl 3005") index = child.expect(["(?i)---- More ----","(?i)E8000E-1>"]) if ( index == 0 ): child.send("a") child.expect("(?i)E8000E-1>") child.sendline("dis acl 3006") index = child.expect(["(?i)---- More ----","(?i)E8000E-1>"]) if ( index == 0 ): child.send("a") child.expect("(?i)E8000E-1>") child.sendline("dis acl 3007") index = child.expect(["(?i)---- More ----","(?i)E8000E-1>"]) if ( index == 0 ): child.send("a") child.expect("(?i)E8000E-1>") child.sendline("dis alarm all") child.expect("(?i)E8000E-1>") child.sendline("dis logbuffer | in %s"%tdy) for i in range(20): index = child.expect(["(?i)---- More ----","(?i)E8000E-1>"]) if ( index == 0 ): child.send(" ") else: child.sendline("q") break
02_03-M9006.py # H3C M9006 交互腳本
#!/usr/bin/env python import pexpect import sys import datetime d1=datetime.datetime.now() d3=d1+datetime.timedelta(days=-1) tdy=d3.strftime('%b') today=datetime.date.today().strftime('%Y%m%d') ip=str(sys.argv[1]) passwd=str(sys.argv[2]) password=str(sys.argv[3]) if ip == '判斷ip,手動(dòng)打碼': txt='03SM-M9006.txt' else: txt='02DMZ-M9006.txt' child=pexpect.spawn('ssh 用戶(hù)名@%s'%ip) fout=file('/usr/sh/shell/linux/xunjian/'+today+'/'+txt,'w') child.logfile = fout child.expect('(?i)ssword:') child.sendline("%s"%passwd) child.expect('(?i)M9006>') child.sendline("su") child.expect("(?i)assword:") child.sendline("%s"%password) child.expect("M9006>") child.sendline("dis device | ex Normal") child.expect("M9006>") child.sendline("dis version | in uptime") child.expect("M9006>") child.sendline("dis environment") for i in range(10): index = child.expect(["(?i)---- More ----","M9006>"]) if ( index == 0 ): child.send(" ") else: child.sendline("dir | in total") break child.expect("M9006>") child.sendline("dis memory") for i in range(10): index = child.expect(["(?i)---- More ----","M9006>"]) if ( index == 0 ): child.send(" ") else: child.sendline("dis irf link") break child.expect("M9006>") child.sendline("dis redundancy group") child.expect("---- More ----") child.send('a') child.expect("M9006>") child.sendline("dis session statistics summary") child.expect("M9006>") child.sendline("dis ip routing-table protocol static") child.expect("M9006>") child.sendline("dis int brief | in UP") for i in range(10): index = child.expect(["(?i)---- More ----","M9006>"]) if ( index == 0 ): child.send(" ") else: break if ip == '判斷ip': child.sendline("dis acl 3001") for i in range(10): index = child.expect(["(?i)---- More ----","M9006>"]) if ( index == 0 ): child.send(" ") else: child.sendline("dis acl 3002") child.expect("M9006>") child.sendline("dis alarm") break else: child.sendline("dis object-policy ip") for i in range(20): index = child.expect(["(?i)---- More ----","M9006>"]) if ( index == 0 ): child.send(" ") else: child.sendline("dis alarm") break child.expect("M9006>") child.sendline("dis logbuffer reverse | in %s"%tdy) index = child.expect(["(?i)---- More ----","M9006>"]) 這邊其實(shí)只要一個(gè) for 循環(huán)就可以了,不高興改了 if ( index == 0 ): child.send(" ") index = child.expect(["(?i)---- More ----","M9006>"]) if ( index == 0 ): child.send(" ") index = child.expect(["(?i)---- More ----","M9006>"]) if ( index == 0 ): child.send(" ") index = child.expect(["(?i)---- More ----","M9006>"]) if ( index == 0 ): child.send(" ") index = child.expect(["(?i)---- More ----","M9006>"]) if ( index == 0 ): child.send(" ") index = child.expect(["(?i)---- More ----","M9006>"]) if ( index == 0 ): child.send(" ") index = child.expect(["(?i)---- More ----","M9006>"]) if ( index == 0 ): child.send(" ") index = child.expect(["(?i)---- More ----","M9006>"]) if ( index == 0 ): child.send(" ") index = child.expect(["(?i)---- More ----","M9006>"]) if ( index == 0 ): child.send(" ") index = child.expect(["(?i)---- More ----","M9006>"]) if ( index == 0 ): child.send("a") index = child.expect(["(?i)---- More ----","M9006>"]) if ( index == 0 ): child.send("a") else: child.sendline('') child.expect("M9006>") child.sendline("q")
04IN-FG3950B.py # 飛塔 FG3950B 交互腳本
#!/usr/bin/env python import pexpect import sys import datetime today=datetime.date.today().strftime('%Y%m%d') ip=str(sys.argv[1]) passwd=str(sys.argv[2]) child=pexpect.spawn('ssh 用戶(hù)@%s'%ip) fout=file('/usr/sh/shell/linux/xunjian/'+today+'/04IN-FG3950B.txt','w') child.logfile = fout child.expect('(?i)ssword:') child.sendline("%s"%passwd) child.expect('W-IN-FG3950-1 #') child.sendline("get sys performance status") for i in range(5): index = child.expect(["(?i)--More--","W-IN-FG3950-1 #"]) if ( index == 0 ): child.send(" ") else: child.sendline("diagnose sys session stat") break child.expect('W-IN-FG3950-1 #') child.sendline("get route info routing-table static") child.expect('--More--') child.send(' ') child.expect('W-IN-FG3950-1 #') child.sendline("exit")
05_06DMZ-S9306.py # 華為 S9306 交互腳本
#!/usr/bin/env python import pexpect import sys import datetime d1=datetime.datetime.now() d3=d1+datetime.timedelta(days=-1) tdy=d3.strftime('%b %d') today=datetime.date.today().strftime('%Y%m%d') tt=tdy.split() if int(tt[-1]) < 10: tdy=tdy.replace('0',' ') ip=str(sys.argv[1]) passwd=str(sys.argv[2]) password=str(sys.argv[3]) child=pexpect.spawn('ssh 用戶(hù)名@%s'%ip) if ip == '判斷ip,不止一個(gè)該類(lèi)型設(shè)備': txt='05DMZ-S9306-1.txt' else: txt='06DMZ-S9306-2.txt' fout=file('/usr/sh/shell/linux/xunjian/'+today+'/'+txt,'w') child.logfile = fout child.expect('(?i)ssword:') child.sendline("%s"%passwd) child.expect('<JSYD-WX-12580-DMZ-9306') child.sendline("su") child.expect("(?i)assword:") child.sendline("%s"%password) child.expect("<JSYD-WX-12580-DMZ-9306") child.sendline("dis device") child.expect("<JSYD-WX-12580-DMZ-9306") child.sendline("dis version | in Quidway") child.expect("<JSYD-WX-12580-DMZ-9306") child.sendline("dir") child.expect("<JSYD-WX-12580-DMZ-9306") child.sendline("dis cpu-usage") index = child.expect(["(?i)---- More ----","<JSYD-WX-12580-DMZ-9306(?i)"]) if ( index == 0 ): child.send("a") child.expect("<JSYD-WX-12580-DMZ-9306") child.sendline("dis memory-usage") child.expect("<JSYD-WX-12580-DMZ-9306") child.sendline("dis int brief | in up") child.expect("<JSYD-WX-12580-DMZ-9306") child.sendline("dis vrrp brief") child.expect("<JSYD-WX-12580-DMZ-9306") child.sendline("dis mac-address total-number") child.expect("<JSYD-WX-12580-DMZ-9306") child.sendline("dis arp statistics all") child.expect("<JSYD-WX-12580-DMZ-9306") child.sendline("dis ip routing-table protocol static") child.expect("<JSYD-WX-12580-DMZ-9306") child.sendline("dis temperature all") child.expect("<JSYD-WX-12580-DMZ-9306") child.sendline("dis alarm all") child.expect("<JSYD-WX-12580-DMZ-9306") child.sendline("dis logbuffer | in %s"%tdy) for i in range(50): index = child.expect(["(?i)---- More ----","<JSYD-WX-12580-DMZ-9306(?i)"]) if ( index == 0 ): child.send(" ") else: child.sendline("q") break
07_08-S12508.py # H3C S12508 交互腳本
#!/usr/bin/env python import pexpect import sys import datetime d1=datetime.datetime.now() d3=d1+datetime.timedelta(days=-1) tdy=d3.strftime('%b %d') today=datetime.date.today().strftime('%Y%m%d') tt=tdy.split() if int(tt[-1]) < 10: tdy=tdy.replace('0',' ') ip=str(sys.argv[1]) passwd=str(sys.argv[2]) password=str(sys.argv[3]) child=pexpect.spawn('ssh 用戶(hù)名@%s'%ip) IP=['ip1','ip2'] if ip == IP[0]: txt='07DMZ-S12508.txt' name='<W-DMZ-G1G2-12508>' else: txt='08IN-S12508.txt' name='<W-IN-G7G8-12508>' fout=file('/usr/sh/shell/linux/xunjian/'+today+'/'+txt,'w') child.logfile = fout child.expect('(?i)ssword:') child.sendline("%s"%passwd) child.expect("%s"%name) child.sendline("su") child.expect("(?i)assword:") child.sendline("%s"%password) child.expect("%s"%name) child.sendline("dis device | ex Normal") child.expect("%s"%name) child.sendline("dis version | in H3C S12508") child.expect("%s"%name) child.sendline("dir") child.expect("%s"%name) child.sendline("dis memory") child.expect("%s"%name) child.sendline("dis irf link") for i in range(10): index = child.expect(["(?i)---- More ----","%s"%name]) if ( index == 0 ): child.send(" ") else: child.sendline("dis int brief | in UP") break for i in range(20): index = child.expect(["(?i)---- More ----","%s"%name]) if ( index == 0 ): child.send(" ") else: child.sendline("dis mac-address count") break child.expect("%s"%name) child.sendline("dis arp all count") if ip == "手動(dòng)打碼": child.expect("%s"%name) child.sendline("dis ip routing-table vpn-instance Dmz protocol static") for i in range(20): index = child.expect(["(?i)---- More ----","%s"%name]) if ( index == 0 ): child.send(" ") else: child.sendline("dis ip routing-table vpn-instance Inside protocol static") for i in range(20): index = child.expect(["(?i)---- More ----","%s"%name]) if ( index == 0 ): child.send(" ") else: child.sendline(" ") break break child.expect("%s"%name) child.sendline("dis environment") for i in range(50): index = child.expect(["(?i)---- More ----","%s"%name]) if ( index == 0 ): child.send(" ") else: child.sendline("dis alarm") break child.expect("%s"%name) child.sendline("dis logbuffer | in %s"%tdy) for i in range(50): index = child.expect(["(?i)---- More ----","%s"%name]) if ( index == 0 ): child.send(" ") else: child.sendline("q") sys.exit()
09_10SM-N7K.py # Cisco N7K 交互腳本
#!/usr/bin/env python import pexpect import sys import datetime today=datetime.date.today().strftime('%Y%m%d') ip=str(sys.argv[1]) passwd=str(sys.argv[2]) child=pexpect.spawn('telnet %s'%ip) if ip == '是個(gè)ip': txt='09SM-N7K-1.txt' name='W-SM-N7K-1#' else: txt='10SM-N7K-2.txt' name='W-SM-N7K-2#' fout=file('/usr/sh/shell/linux/xunjian/'+today+'/'+txt,'w') child.logfile = fout child.expect('login:') child.sendline("發(fā)送用戶(hù)名") child.expect('(?i)ssword:') child.sendline("%s"%passwd) child.expect("%s"%name) child.sendline("sh hardware | in ok") child.expect("%s"%name) child.sendline("sh version | in uptime") child.expect("%s"%name) child.sendline("dir") child.expect("%s"%name) child.sendline("sh int brief | in up") for i in range(10): index = child.expect(["(?i)More--","%s"%name]) if ( index == 0 ): child.send(" ") else: child.sendline("sh hsrp brief") break child.expect("%s"%name) child.sendline("sh mac address-table count") child.expect("%s"%name) child.sendline("sh ip arp | in number") child.expect("%s"%name) child.sendline("sh ip route static summary") child.expect("%s"%name) child.sendline("sh environment temperature") for i in range(10): index = child.expect(["(?i)More--","%s"%name]) if ( index == 0 ): child.send(" ") else: child.sendline("sh vpc") break for i in range(10): index = child.expect(["(?i)More--","%s"%name]) if ( index == 0 ): child.send(" ") else: child.sendline("sh logging last 30") break for i in range(10): index = child.expect(["(?i)More--","%s"%name]) if ( index == 0 ): child.send(" ") else: child.sendline("exit") sys.exit()
11_12DMZ-NE40E.py # 華為 NE40E 交互腳本
#!/usr/bin/env python import pexpect import sys import datetime d1=datetime.datetime.now() d3=d1+datetime.timedelta(days=-1) tdy=d3.strftime('%b %d') today=datetime.date.today().strftime('%Y%m%d') tt=tdy.split() if int(tt[-1]) < 10: tdy=tdy.replace('0',' ') ip=str(sys.argv[1]) passwd=str(sys.argv[2]) child=pexpect.spawn('ssh 用戶(hù)名@%s'%ip) IP=['ip1','ip2'] if ip == IP[0]: txt='11DMZ-NE40E-1.txt' name='<W-SM-E11-NE40E-01>' elif ip == IP[1]: txt='12DMZ-NE40E-2.txt' name='<W-SM-E12-NE40E-02>' else: print "IP Input Error!" sys.exit() fout=file('/usr/sh/shell/linux/xunjian/'+today+'/'+txt,'w') child.logfile = fout child.expect('(?i)ssword:') child.sendline("%s"%passwd) child.expect("(?i)N]:") child.sendline("n") child.expect("%s"%name) child.sendline("dis device | ex Normal") child.expect("%s"%name) child.sendline("dis version | in NE40E-X8 uptime") child.expect("%s"%name) child.sendline("dir") index = child.expect(["(?i)---- More ----","%s"%name]) if ( index == 0 ): child.send(" ") index = child.expect(["(?i)---- More ----","%s"%name]) if ( index == 0 ): child.send(" ") else: child.sendline("dis memory-usage") else: child.sendline("dis memory-usage") child.expect("%s"%name) child.sendline("dis int brief | in up") child.expect("%s"%name) child.sendline("dis ip routing-table protocol static") child.expect("%s"%name) child.sendline("dis temperature") for i in range(40): index = child.expect(["(?i)---- More ----","%s"%name]) if ( index == 0 ): child.send(" ") else: child.sendline("dis alarm all") break child.expect("%s"%name) child.sendline("dis logbuffer | in %s"%tdy) for i in range(30): index = child.expect(["(?i)---- More ----","%s"%name]) if ( index == 0 ): child.send(" ") else: child.sendline("q") break
13_16-RD5412_6420.py # Radware RD5412 交互腳本,只要掌握一個(gè),其他都是套路
#!/usr/bin/env python import pexpect import sys import datetime d1=datetime.datetime.now() d3=d1+datetime.timedelta(days=-1) tdy=d3.strftime('%b %d') today=datetime.date.today().strftime('%Y%m%d') tt=tdy.split() if int(tt[-1]) < 10: tdy=tdy.replace('0',' ') ip=str(sys.argv[1]) passwd=str(sys.argv[2]) child=pexpect.spawn('ssh 還是用戶(hù)名@%s'%ip) IP=['ip1','ip2','ip3','ip4'] if ip == IP[0]: txt='13DMZ-RD5412-1.txt' elif ip == IP[1]: txt='14DMZ-RD5412-2.txt' elif ip == IP[2]: txt='15SM-RD6420-1.txt' elif ip == IP[3]: txt='16SM-RD6420-2.txt' else: print "IP Input Error!" sys.exit() name='Standalone ADC(?i)' fout=file('/usr/sh/shell/linux/xunjian/'+today+'/'+txt,'w') child.logfile = fout child.expect('(?i)ssword:') child.sendline("%s"%passwd) if ip == IP[3]: child.expect("(?i)y]:") child.sendline("y") child.expect("%s"%name) child.sendline("/i/sys/general") child.expect("%s"%name) child.sendline("/i/sys/ps") child.expect("%s"%name) child.sendline("/i/sys/fan") child.expect("%s"%name) child.sendline("/i/link") index = child.expect(["Press q to quit, any other key to continue","%s"%name]) if ( index == 0 ): child.send(" ") index = child.expect(["Press q to quit, any other key to continue","%s"%name]) if ( index == 0 ): child.send(" ") else: child.sendline("/i/sys/capacity slb") else: child.sendline("/i/sys/capacity slb") index = child.expect(["Press q to quit, any other key to continue","%s"%name]) if ( index == 0 ): child.send(" ") index = child.expect(["Press q to quit, any other key to continue","%s"%name]) if ( index == 0 ): child.send(" ") index = child.expect(["Press q to quit, any other key to continue","%s"%name]) if ( index == 0 ): child.send(" ") else: child.sendline("/stats/mp/cpu") else: child.sendline("/stats/mp/cpu") else: child.sendline("/stats/mp/cpu") child.expect("%s"%name) child.sendline("/stats/mp/mem") child.expect("%s"%name) child.sendline("/i/sys/temp") child.expect("%s"%name) child.sendline("/i/l3/vrrp") child.expect("%s"%name) child.sendline("/i/sys/log") for i in range(50): index = child.expect(["Press q to quit, any other key to continue","%s"%name]) if ( index == 0 ): child.send(" ") else: child.sendline("exit") break #index = child.expect(["(?i)n]:","%s"%name]) #if ( index == 0 ): if ip == IP[3]: child.expect("(?i)n]:") child.sendline("y") #else: # pass child.expect("(?i)n]:") child.sendline("n")
3、編寫(xiě)郵件腳本
mail.py
#!/usr/bin/python # -*- coding: utf-8 -*- from email.header import Header import smtplib import email.MIMEMultipart# import MIMEMultipart import email.MIMEText# import MIMEText import email.MIMEBase# import MIMEBase import os.path import sys import mimetypes import email.MIMEImage# import MIMEImage import datetime tday=datetime.date.today().strftime('%Y/%m/%d') #命令 mail.py <1:發(fā)送方(回復(fù)地址)10000@qq.com> <2:發(fā)送地址,多個(gè)以;隔開(kāi)> <3:發(fā)送文件> From = "%s<*@139.com>" % Header("XXX","utf-8") ReplyTo=sys.argv[1] To = sys.argv[2] file_name = sys.argv[3]#附件名 file_name1 = sys.argv[4] server = smtplib.SMTP("smtp.139.com",25) server.login("user@139.com","password") #僅smtp服務(wù)器需要驗(yàn)證時(shí) # 構(gòu)造MIMEMultipart對(duì)象做為根容器 main_msg = email.MIMEMultipart.MIMEMultipart() # 構(gòu)造MIMEText對(duì)象做為郵件顯示內(nèi)容并附加到根容器 text_msg = email.MIMEText.MIMEText("message內(nèi)容正文",_charset="utf-8") main_msg.attach(text_msg) # 構(gòu)造MIMEBase對(duì)象做為文件附件內(nèi)容并附加到根容器 ctype,encoding = mimetypes.guess_type(file_name) if ctype is None or encoding is not None: ctype='application/octet-stream' maintype,subtype = ctype.split('/',1) file_msg=email.MIMEImage.MIMEImage(open(file_name,'rb').read(),subtype) file_msg1=email.MIMEImage.MIMEImage(open(file_name1,'rb').read(),subtype) ## 設(shè)置附件頭 basename = os.path.basename(file_name) file_msg.add_header('Content-Disposition','attachment', filename = basename)#修改郵件頭 main_msg.attach(file_msg) basename1 = os.path.basename(file_name1) file_msg1.add_header('Content-Disposition','attachment', filename = basename1)#修改郵件頭 main_msg.attach(file_msg1) # 設(shè)置根容器屬性 main_msg['From'] = From main_msg['Reply-to'] = ReplyTo #main_msg['To'] = To main_msg['Subject'] = u"[每日巡檢] %s郵件標(biāo)題" %tday main_msg['Date'] = email.Utils.formatdate() #main_msg['Bcc'] = To # 得到格式化后的完整文本 fullText = main_msg.as_string( ) # 用smtp發(fā)送郵件 try: server.sendmail(From, To.split(';'), fullText) finally: server.quit()
mail_excel_error.py # 報(bào)錯(cuò)通知郵件:excel不存在
#!/usr/bin/env python # -*- coding:utf-8 -*- #import sys #reload(sys) import smtplib,string,datetime,xlrd tday=datetime.date.today().strftime('%Y/%m/%d') HOST="smtp.139.com" SUBJECT="[每日巡檢] %s哈哈哈"%tday TO="*.com" FROM="*@139.com" text="excel no cunzai" BODY=string.join(( "FROM: %s" % FROM, "To: %s" % TO, "Subject: %s" % SUBJECT, "", text ), "\r\n") server=smtplib.SMTP() server.connect(HOST,"25") server.starttls() server.login(FROM,"密碼") server.sendmail(FROM,[TO],BODY) server.quit()
mail_zip_error.py # 郵件告警:巡檢歷史記錄壓縮文檔不存在
#!/usr/bin/env python # -*- coding:utf-8 -*- #import sys #reload(sys) import smtplib,string,datetime,xlrd tday=datetime.date.today().strftime('%Y/%m/%d') HOST="smtp.139.com" SUBJECT="[每日巡檢] %s嘻嘻嘻" %tday TO="asdas.com" FROM="***@139.com" text="zip no cunzai" BODY=string.join(( "FROM: %s" % FROM, "To: %s" % TO, "Subject: %s" % SUBJECT, "", text ), "\r\n") server=smtplib.SMTP() server.connect(HOST,"25") server.starttls() server.login(FROM,"PASSWORD") server.sendmail(FROM,[TO],BODY) server.quit()
4、數(shù)據(jù)處理
wangluo_xunjian.py # 根據(jù)巡檢內(nèi)容制表
#!/usr/bin/env python # -*- coding:utf-8 -*- #import sys #reload(sys) import xlsxwriter,os,datetime def cmd(sname,fname): # 該函數(shù)判斷巡檢命令行所在輸出文件位置 i=1 f=open(fname) line_hang_list=[] for line in f: if line.find(sname) == 0: line_hang_list.append(i) i+=1 f.close return line_hang_list def cmd1(sname,fname): # 同上 i=1 f=open(fname) line_hang_list=[] for line in f: if sname in line: line_hang_list.append(i) i+=1 f.close return line_hang_list tday=datetime.date.today().strftime('%Y.%m.%d') today=datetime.date.today().strftime('%Y%m%d') workbook=xlsxwriter.Workbook(u"/usr/sh/shell/linux/xunjian/%s/網(wǎng)絡(luò)設(shè)備巡檢-%s.xlsx"%(today,tday),{'strings_to_numbers':True}) file_01='/usr/sh/shell/linux/xunjian/'+str(today)+'/01DMZ-E8000E.txt' file_02_1='/usr/sh/shell/linux/xunjian/'+str(today)+'/03SM-M9006.txt' file_02_2='/usr/sh/shell/linux/xunjian/'+str(today)+'/02DMZ-M9006.txt' file_03='/usr/sh/shell/linux/xunjian/'+str(today)+'/04IN-FG3950B.txt' # 新建 sheet worksheet0=workbook.add_worksheet(u"防火墻") worksheet1=workbook.add_worksheet(u"交換機(jī)") worksheet2=workbook.add_worksheet(u"路由器") worksheet3=workbook.add_worksheet(u"負(fù)載") # 設(shè)置單元格格式(居中,顏色,邊框,合并,列寬,列隱藏等) colour='#660099' format_title=workbook.add_format() format_title.set_border(1) format_title.set_bottom(2) format_title.set_bold(1) format_title.set_font_color('white') format_title.set_bg_color(colour) format_title.set_align('center') format_title.set_valign('vcenter') format_nr=workbook.add_format() format_nr.set_border(1) format_nr.set_bottom(2) format_nr.set_align('center') format_nr.set_valign('vcenter') format_nrr=workbook.add_format() format_nrr.set_border(1) format_nrr.set_valign('vcenter') format_nrr.set_text_wrap() format_bottom=workbook.add_format() format_bottom.set_border(1) format_bottom.set_bottom(2) format_bottom.set_valign('vcenter') format_bottom.set_text_wrap() format_rt=workbook.add_format() format_rt.set_border(1) format_rt.set_right(2) format_rt.set_valign('left') format_rt.set_text_wrap() format_right=workbook.add_format() format_right.set_border(1) format_right.set_right(2) format_right.set_bottom(2) format_right.set_valign('vcenter') format_right.set_text_wrap() format_red=workbook.add_format() format_red.set_font_color('red') format_red.set_border(1) format_red.set_right(2) format_red.set_valign('vcenter') format_rd=workbook.add_format() format_rd.set_font_color('red') format_rd.set_border(1) format_rd.set_right(2) format_rd.set_bottom(2) format_rd.set_valign('vcenter') # 填寫(xiě)相關(guān)固定單元格內(nèi)容 firewall_title=[u'設(shè)備名稱(chēng)',u'設(shè)備類(lèi)型',u'IP地址',u'檢查項(xiàng)',u'命令',u'說(shuō)明',u'檢查結(jié)果'] firewall_jc=[u'設(shè)備狀態(tài)',u'運(yùn)行時(shí)長(zhǎng)',u'運(yùn)行溫度',u'Flash狀態(tài)',u'CPU使用率',u'內(nèi)存使用率',u'冗余組狀態(tài)',u'session數(shù)目',u'路由條數(shù)',u'端口狀態(tài)',u'策略條數(shù)',u'告警',u'日志',u'板卡狀態(tài)',u'運(yùn)行時(shí)長(zhǎng)',u'運(yùn)行溫度',u'Flash狀態(tài)',u'CPU使用率',u'內(nèi)存使用率',u'堆疊狀態(tài)',u'冗余組狀態(tài)',u'session數(shù)目',u'路由條數(shù)',u'端口狀態(tài)',u'策略條數(shù)',u'告警',u'日志',u'板卡狀態(tài)',u'運(yùn)行時(shí)長(zhǎng)',u'運(yùn)行溫度',u'Flash狀態(tài)',u'CPU使用率',u'內(nèi)存使用率',u'堆疊狀態(tài)',u'冗余組狀態(tài)',u'session數(shù)目',u'路由條數(shù)',u'端口狀態(tài)',u'策略條數(shù)',u'告警',u'日志',u'運(yùn)行時(shí)長(zhǎng)',u'CPU使用率 (BOMC看)',u'內(nèi)存使用率',u'網(wǎng)絡(luò)流量',u'session數(shù)目',u'新建session速率',u'接口狀態(tài)',u'冗余組狀態(tài)',u'路由條數(shù)',u'日志',u'策略條數(shù)',u'告警'] firewall_cmd=['dis device | ex Normal','dis version','dis temperature','dir',u'在BOMC看','dis memory-usage','dis hrp state','dis firewall session table','dis ip routing-table protocol static','dis int brief (dis logbuffer | in DOWN)','dis acl 3004 (3004-3007)','dis alarm all','dis logbuffer | in [data]','dis device | ex Normal','dis version | in uptime','dis environment','dir | in total',u'在BOMC看','dis memory','dis irf link','dis redundancy group','dis session statistics summary','dis ip routing-table protocol static','dis int brief (dis logbuffer | in DOWN)','dis object-policy ip','dis alarm','dis logbuffer | in [month]','dis device | ex Normal','dis version | in uptime','dis environment','dir | in total',u'在BOMC看','dis memory','dis irf link','dis redundancy group','dis session statistics summary','dis ip routing-table protocol static','dis int brief (dis logbuffer | in DOWN)','dis acl all','dis alarm','dis logbuffer | in [month]','get sys performance status','','','','diagnose sys session stat','',u'網(wǎng)頁(yè)登錄查看',u'網(wǎng)頁(yè)登錄查看','get route info routing table static',u'網(wǎng)頁(yè)登錄查看',u'網(wǎng)頁(yè)登錄查看',u'網(wǎng)頁(yè)登錄查看'] firewall_sm=[u'填寫(xiě)Status是Abnormal的項(xiàng)',u'填寫(xiě)已運(yùn)行天數(shù),小時(shí)數(shù)',u'填寫(xiě)溫度范圍',u'填寫(xiě)total和free的flash大小',u'填寫(xiě)CPU使用率峰值和平均值',u'填寫(xiě)內(nèi)存使用率',u'填寫(xiě)本機(jī)和鄰居的角色,看有無(wú)發(fā)生主備切換',u'填寫(xiě)鏈接總數(shù)',u'填寫(xiě)路由數(shù)目',u'填寫(xiě)狀態(tài)為UP的端口數(shù)目',u'填寫(xiě)策略數(shù)目',u'填寫(xiě)告警內(nèi)容,無(wú)告警則填寫(xiě)“無(wú)告警”',u'填寫(xiě)異常日志,無(wú)異常則填寫(xiě)“正?!?,u'填寫(xiě)State為Absent,且Type不為NONE的項(xiàng)',u'填寫(xiě)已運(yùn)行天數(shù),小時(shí)數(shù)',u'填寫(xiě)溫度范圍',u'填寫(xiě)total和free的flash大小',u'填寫(xiě)CPU使用率峰值和平均值',u'填寫(xiě)內(nèi)存使用率范圍',u'填寫(xiě)Status不是UP的項(xiàng)',u'填寫(xiě)Status,看有無(wú)發(fā)生主備切換',u'填寫(xiě)鏈接總數(shù)',u'填寫(xiě)路由數(shù)目',u'填寫(xiě)狀態(tài)為UP的端口數(shù)目',u'填寫(xiě)策略數(shù)目(所有rule的總數(shù))',u'填寫(xiě)告警內(nèi)容,無(wú)告警則填寫(xiě)“無(wú)告警”',u'填寫(xiě)異常日志,無(wú)異常則填寫(xiě)“正常”',u'填寫(xiě)State為Absent,且Type不為NONE的項(xiàng)',u'填寫(xiě)已運(yùn)行天數(shù),小時(shí)數(shù)',u'填寫(xiě)溫度范圍',u'填寫(xiě)total和free的flash大小',u'填寫(xiě)CPU使用率峰值和平均值',u'填寫(xiě)內(nèi)存使用率范圍',u'填寫(xiě)Status不是UP的項(xiàng)',u'填寫(xiě)Status,看有無(wú)發(fā)生主備切換',u'填寫(xiě)鏈接總數(shù)',u'填寫(xiě)路由數(shù)目',u'填寫(xiě)狀態(tài)為UP的端口數(shù)目',u'填寫(xiě)策略數(shù)目(acl 3001+3002的總條目數(shù))',u'填寫(xiě)告警內(nèi)容,無(wú)告警則填寫(xiě)“無(wú)告警”',u'填寫(xiě)異常日志,無(wú)異常則填寫(xiě)“正?!?,u'填寫(xiě)已運(yùn)行天數(shù),小時(shí)數(shù)',u'填寫(xiě)CPU使用率峰值和平均值',u'填寫(xiě)內(nèi)存使用率',u'填寫(xiě)30分鐘內(nèi)平均帶寬占用(kbps)',u'填寫(xiě)session_count值',u'填寫(xiě)setup_rate值',u'填寫(xiě)啟用狀態(tài)的接口數(shù)目',u'填寫(xiě)冗余狀態(tài)',u'填寫(xiě)路由數(shù)目',u'填寫(xiě)異常日志,無(wú)異常則填寫(xiě)“正?!?,u'填寫(xiě)策略數(shù)目',u'填寫(xiě)告警內(nèi)容,無(wú)告警則填寫(xiě)“無(wú)告警”'] switch_title=[u'設(shè)備名稱(chēng)',u'設(shè)備類(lèi)型',u'IP地址',u'檢查項(xiàng)',u'命令',u'說(shuō)明',u'檢查結(jié)果'] switch_jc=[u'設(shè)備狀態(tài)',u'運(yùn)行時(shí)長(zhǎng)',u'Flash狀態(tài)',u'CPU使用率',u'內(nèi)存使用率',u'接口狀態(tài)',u'VRRP狀態(tài)',u'MAC地址條目數(shù)',u'ARP條目數(shù)',u'路由條目數(shù)',u'運(yùn)行溫度',u'告警',u'日志'] switch_jc1=[u'設(shè)備狀態(tài)',u'運(yùn)行時(shí)長(zhǎng)',u'Flash狀態(tài)',u'CPU使用率',u'內(nèi)存使用率',u'堆疊狀態(tài)',u'接口狀態(tài)',u'MAC地址條目數(shù)',u'ARP條目數(shù)',u'路由條目數(shù)',u'運(yùn)行溫度',u'告警',u'日志'] switch_jc2=[u'設(shè)備狀態(tài)',u'運(yùn)行時(shí)長(zhǎng)',u'Flash狀態(tài)',u'CPU使用率',u'內(nèi)存使用率',u'堆疊狀態(tài)',u'接口狀態(tài)',u'MAC地址條目數(shù)',u'ARP條目數(shù)',u'運(yùn)行溫度',u'告警',u'日志'] switch_cmd=['dis device','dis version | in Quidway','dir','dis cpu-usage','dis memory-usage','dis int brief (dis logbuffer | in IF_STATE)','dis vrrp brief','dis mac-address total-number','dis arp statistics all','dis ip routing-table protocol static','dis temperature all','dis alarm all','dis logbuffer | in [date]'] switch_cmmd=['dis device | ex Normal','dis version | in H3C S12508','dir',u'在BOMC看','dis memory','dis irf link','dis int brief (dis logbuffer reverse | in UPDOWN)','dis mac-address count','dis arp all count','dis ip routing-table vpn-instance Dmz/Inside protocol static','dis environment','dis alarm','dis logbuffer reverse | in [date]'] switch_cmd1=['dis device | ex Normal','dis version | in H3C S12508','dir',u'在BOMC看','dis memory','dis int brief (dis logbuffer reverse | in UPDOWN)','dis vrrp','dis mac-address count','dis arp all count','dis ip routing-table protocol static','dis environment','dis alarm','dis logbuffer reverse | in [date]'] switch_cmd2=['dis device | ex Normal','dis version | in H3C S12508','dir',u'在BOMC看','dis memory','dis irf link','dis int brief (dis logbuffer reverse | in UPDOWN)','dis mac-address count','dis arp all count','dis environment','dis alarm','dis logbuffer reverse | in [date]'] switch_sm=[u'查看電源、風(fēng)扇以及板卡狀態(tài),填寫(xiě)異常項(xiàng)',u'填寫(xiě)已運(yùn)行天數(shù),小時(shí)數(shù)',u'填寫(xiě)total和free的flash大小',u'填寫(xiě)CPU使用率',u'填寫(xiě)內(nèi)存使用率',u'填寫(xiě)狀態(tài)為UP的端口數(shù)目',u'查看VRRP主備狀態(tài)',u'填寫(xiě)總的mac-address條目數(shù)',u'填寫(xiě)動(dòng)態(tài)和靜態(tài)ARP條目數(shù)',u'填寫(xiě)路由數(shù)目',u'填寫(xiě)溫度范圍',u'填寫(xiě)告警內(nèi)容,無(wú)告警則填寫(xiě)“無(wú)告警”',u'填寫(xiě)異常日志,無(wú)異常則填寫(xiě)“正?!?] switch_ssm=[u'填寫(xiě)狀態(tài)異常的項(xiàng)',u'填寫(xiě)已運(yùn)行天數(shù),小時(shí)數(shù)',u'填寫(xiě)total和free的flash大小',u'填寫(xiě)CPU使用率峰值和平均值',u'填寫(xiě)內(nèi)存使用率',u'填寫(xiě)Status不是UP的項(xiàng)',u'填寫(xiě)狀態(tài)為UP的端口數(shù)目',u'填寫(xiě)總的mac-address條目數(shù)',u'填寫(xiě)總的ARP條目數(shù)',u'填寫(xiě)路由數(shù)目(Dmz和Inside路由總和)',u'填寫(xiě)溫度范圍',u'填寫(xiě)設(shè)備告警,無(wú)則填寫(xiě)“無(wú)告警”',u'填寫(xiě)異常日志,無(wú)異常則填寫(xiě)“正?!?] switch_sm1=[u'填寫(xiě)狀態(tài)異常的項(xiàng)',u'填寫(xiě)已運(yùn)行天數(shù),小時(shí)數(shù)',u'填寫(xiě)total和free的flash大小',u'填寫(xiě)CPU使用率峰值和平均值',u'填寫(xiě)內(nèi)存使用率',u'填寫(xiě)狀態(tài)為UP的端口數(shù)目',u'查看VRRP主備狀態(tài)',u'填寫(xiě)總的mac-address條目數(shù)',u'填寫(xiě)總的ARP條目數(shù)',u'填寫(xiě)路由數(shù)目',u'填寫(xiě)溫度范圍',u'填寫(xiě)設(shè)備告警,無(wú)則填寫(xiě)“無(wú)告警”',u'填寫(xiě)異常日志,無(wú)異常則填寫(xiě)“正>?!?] switch_sm2=[u'填寫(xiě)狀態(tài)異常的項(xiàng)',u'填寫(xiě)已運(yùn)行天數(shù),小時(shí)數(shù)',u'填寫(xiě)total和free的flash大小',u'填寫(xiě)CPU使用率峰值和平均值',u'填寫(xiě)內(nèi)存使用率',u'填寫(xiě)Status不是UP的項(xiàng)',u'填寫(xiě)狀態(tài)為UP的端口數(shù)目',u'填寫(xiě)總的mac-address條目數(shù)',u'填寫(xiě)總的ARP條目數(shù)',u'填寫(xiě)溫度范圍',u'填寫(xiě)設(shè)備告警,無(wú)則填寫(xiě)“無(wú)告警”',u'填寫(xiě)異常日志,無(wú)異常則填寫(xiě)“正>?!?] route_title=[u'設(shè)備名稱(chēng)',u'設(shè)備類(lèi)型',u'IP地址',u'檢查項(xiàng)',u'命令',u'說(shuō)明',u'檢查結(jié)果'] route_jc=[u'設(shè)備狀態(tài)',u'運(yùn)行時(shí)長(zhǎng)',u'Flash狀態(tài)',u'CPU使用率',u'內(nèi)存使用率',u'接口狀態(tài)',u'路由條數(shù)',u'運(yùn)行溫度',u'告警',u'日志'] route_cmd=['dis device | ex Normal','dis version | in NE40E-X8 uptime','dir',u'在BOMC看','dis memory-usage','dis int brief (dis logbuffer | in IF_STATE)','dis ip routing-table protocol static','dis temperature','dis alarm all','dis logbuffer | in [date]'] route_sm=[u'填寫(xiě)Status不是“Normal”的項(xiàng)',u'填寫(xiě)已運(yùn)行天數(shù),小時(shí)數(shù)',u'填寫(xiě)total和free的flash大小',u'填寫(xiě)CPU使用率峰值和平均值',u'填寫(xiě)內(nèi)存使用率',u'填寫(xiě)狀態(tài)為UP的端口數(shù)目',u'填寫(xiě)路由數(shù)目',u'填寫(xiě)溫度范圍',u'填寫(xiě)告警內(nèi)容,無(wú)告警則填寫(xiě)“無(wú)告警”',u'填寫(xiě)異常日志,無(wú)異常則填寫(xiě)“正?!?] fuzai_title=[u'設(shè)備名稱(chēng)',u'設(shè)備類(lèi)型',u'IP地址',u'檢查項(xiàng)',u'命令',u'說(shuō)明',u'檢查結(jié)果'] fuzai_jc=[u'運(yùn)行時(shí)長(zhǎng)',u'電源狀態(tài)',u'風(fēng)扇狀態(tài)',u'端口狀態(tài)',u'各表項(xiàng)數(shù)值',u'CPU使用率',u'內(nèi)存使用率',u'硬件溫度',u'冗余狀態(tài)',u'日志'] fuzai_cmd=['/i/sys/general','/i/sys/ps','/i/sys/fan','/i/link','/i/sys/capacity slb','/stats/mp/cpu','/stats/mp/mem','/i/sys/temp','/i/l3/vrrp','/i/sys/log'] fuzai_sm=[u'填寫(xiě)已運(yùn)行天數(shù),小時(shí)數(shù)',u'填寫(xiě)電源狀態(tài)',u'填寫(xiě)風(fēng)扇狀態(tài)',u'填寫(xiě)Link處于UP狀態(tài)的端口數(shù)',u'填寫(xiě)real servers/server groups/virtual servers/filters當(dāng)前值',u'填寫(xiě)CPU使用率',u'填寫(xiě)內(nèi)存使用率',u'填寫(xiě)溫度',u'填寫(xiě)VRRP狀態(tài),"master"或者"backup"',u'填寫(xiě)異常日志,無(wú)異常則填寫(xiě)“正?!?] newsmswitch_title=[u'設(shè)備狀態(tài)',u'運(yùn)行時(shí)長(zhǎng)',u'Flash狀態(tài)',u'CPU使用率',u'內(nèi)存使用率',u'接口狀態(tài)',u'HSRP狀態(tài)',u'MAC地址條目數(shù)',u'ARP條目數(shù)',u'路由條目數(shù)',u'運(yùn)行溫度',u'VPC狀態(tài)',u'日志'] newsmswitch_cmd=['sh hardware | in ok','sh version | in uptime','dir',u'在BOMC看',u'在BOMC看','sh int brief (sh int brief | in up)','sh hsrp brief','sh mac address-table count','sh ip arp | in number','sh ip route static summary','sh environment temperature','sh vpc','sh logging last 30'] newsmswitch_sm=[u'填寫(xiě)狀態(tài)為OK的模塊數(shù)',u'填寫(xiě)已運(yùn)行天數(shù),小時(shí)數(shù)',u'填寫(xiě)total和free的flash大小',u'填寫(xiě)CPU使用率峰值和平均值',u'填寫(xiě)內(nèi)存使用率',u'填寫(xiě)狀態(tài)為UP的端口數(shù)目',u'查看HSRP狀態(tài)(Active local則正常)',u'填寫(xiě)總的mac-address條目數(shù)',u'填寫(xiě)總的ARP條目數(shù)',u'填寫(xiě)路由數(shù)目',u'填寫(xiě)CurTemp范圍',u'查看VPC狀態(tài)是否正常',u'查看日志,無(wú)異常則填寫(xiě)"正常"'] # ip 我就隱藏掉啦,雖然也沒(méi)什么意思 host={"DMZ-E8000E":[u'防火墻',"ip1"],"DMZ-M9006":[u'防火墻','ip2'],"SM-M9006":[u'防火墻','ip3'],"IN-FG3950B":[u'防火墻',"ip4"],"DMZ-S9306-1":[u'交換機(jī)',"ip5"],"DMZ-S9306-2":[u'交換機(jī)',"ip6"],"DMZ-S12508":[u'交換機(jī)',"ip7"],"IN-S12508":[u'交換機(jī)',"ip8"],"SM-S12508-1":[u'交換機(jī)',"ip9"],"SM-S12508-2":[u'交換機(jī)',"ip10"],"DMZ-NE40E-1":[u'路由器',"ip11"],"DMZ-NE40E-2":[u'路由器',"ip12"],"DMZ-RD5412-1":[u'負(fù)載',"ip13"],"DMZ-RD5412-2":[u'負(fù)載',"ip14"],"SM-RD6420-1":[u'負(fù)載',"ip15"],"SM-RD6420-2":[u'負(fù)載',"ip16"],"SM-N7K-1":[u"交換機(jī)","ip17"],"SM-N7K-2":[u"交換機(jī)","ip18"]} # 開(kāi)始填寫(xiě)固定單元格內(nèi)容 worksheet0.write_row('A1',firewall_title,format_title) worksheet0.merge_range('A2:A14','DMZ-E8000E',format_nr) worksheet0.merge_range('B2:B14',host["DMZ-E8000E"][0],format_nr) worksheet0.merge_range('C2:C14',host["DMZ-E8000E"][1],format_nr) worksheet0.merge_range('A15:A28','DMZ-M9006',format_nr) worksheet0.merge_range('B15:B28',host["DMZ-M9006"][0],format_nr) worksheet0.merge_range('C15:C28',host["DMZ-M9006"][1],format_nr) worksheet0.merge_range('A29:A42','SM-M9006',format_nr) worksheet0.merge_range('B29:B42',host["SM-M9006"][0],format_nr) worksheet0.merge_range('C29:C42',host["SM-M9006"][1],format_nr) worksheet0.merge_range('A43:A54','IN-FG3950B',format_nr) worksheet0.merge_range('B43:B54',host["IN-FG3950B"][0],format_nr) worksheet0.merge_range('C43:C54',host["IN-FG3950B"][1],format_nr) worksheet0.merge_range('E43:E46','get sys performance status',format_nrr) worksheet0.merge_range('E47:E48','diagnose sys session stat',format_nrr) worksheet0.write_column('D2',firewall_jc,format_nrr) worksheet0.write_column('E2',firewall_cmd,format_nrr) worksheet0.write_column('F2',firewall_sm,format_nrr) worksheet0.write('D14',u'日志',format_bottom) worksheet0.write('E14','dis logbuffer | in [data]',format_bottom) worksheet0.write('F14',u'填寫(xiě)異常日志,無(wú)異常則填寫(xiě)“正?!?,format_bottom) worksheet0.write('D28',u'日志',format_bottom) worksheet0.write('E28','dis logbuffer reverse | in [month]',format_bottom) worksheet0.write('F28',u'填寫(xiě)異常日志,無(wú)異常則填寫(xiě)“正?!?,format_bottom) worksheet0.write('D42',u'日志',format_bottom) worksheet0.write('E42','dis logbuffer reverse | in [month]',format_bottom) worksheet0.write('F42',u'填寫(xiě)異常日志,無(wú)異常則填寫(xiě)“正?!?,format_bottom) worksheet0.write('D54',u'告警',format_bottom) worksheet0.write('E54',u'網(wǎng)頁(yè)登錄查看',format_bottom) worksheet0.write('F54',u'填寫(xiě)告警內(nèi)容,無(wú)告警則填寫(xiě)“無(wú)告警”',format_bottom) worksheet0.set_row(0,30) worksheet0.set_column('B:B',15,None,{'hidden':1}) worksheet0.set_column('E:F',40,None,{'hidden':1}) worksheet0.set_column('A:A',15) worksheet0.set_column('C:D',15) worksheet0.set_column('G:G',40) worksheet1.write_row('A1',switch_title,format_title) worksheet1.merge_range('A2:A14','DMZ-S9306-1',format_nr) worksheet1.merge_range('B2:B14',host["DMZ-S9306-1"][0],format_nr) worksheet1.merge_range('C2:C14',host["DMZ-S9306-1"][1],format_nr) worksheet1.merge_range('A15:A27','DMZ-S9306-2',format_nr) worksheet1.merge_range('B15:B27',host["DMZ-S9306-2"][0],format_nr) worksheet1.merge_range('C15:C27',host["DMZ-S9306-2"][1],format_nr) worksheet1.merge_range('A28:A40','DMZ-S12508',format_nr) worksheet1.merge_range('B28:B40',host["DMZ-S12508"][0],format_nr) worksheet1.merge_range('C28:C40',host["DMZ-S12508"][1],format_nr) worksheet1.merge_range('A41:A52','IN-S12508',format_nr) worksheet1.merge_range('B41:B52',host["IN-S12508"][0],format_nr) worksheet1.merge_range('C41:C52',host["IN-S12508"][1],format_nr) worksheet1.merge_range('A53:A65','SM-N7K-1',format_nr) worksheet1.merge_range('B53:B65',host["SM-N7K-1"][0],format_nr) worksheet1.merge_range('C53:C65',host["SM-N7K-1"][1],format_nr) worksheet1.merge_range('A66:A78','SM-N7K-2',format_nr) worksheet1.merge_range('B66:B78',host["SM-N7K-2"][0],format_nr) worksheet1.merge_range('C66:C78',host["SM-N7K-2"][1],format_nr) worksheet1.write_column('D2',switch_jc,format_nrr) worksheet1.write_column('D15',switch_jc,format_nrr) worksheet1.write_column('D28',switch_jc1,format_nrr) worksheet1.write_column('D41',switch_jc2,format_nrr) worksheet1.write_column('D53',newsmswitch_title,format_nrr) worksheet1.write_column('D66',newsmswitch_title,format_nrr) worksheet1.write_column('E2',switch_cmd,format_nrr) worksheet1.write_column('E15',switch_cmd,format_nrr) worksheet1.write_column('E28',switch_cmmd,format_nrr) worksheet1.write_column('E41',switch_cmd2,format_nrr) worksheet1.write_column('E53',newsmswitch_cmd,format_nrr) worksheet1.write_column('E66',newsmswitch_cmd,format_nrr) worksheet1.write_column('F2',switch_sm,format_nrr) worksheet1.write_column('F15',switch_sm,format_nrr) worksheet1.write_column('F28',switch_ssm,format_nrr) worksheet1.write_column('F41',switch_sm2,format_nrr) worksheet1.write_column('F53',newsmswitch_sm,format_nrr) worksheet1.write_column('F66',newsmswitch_sm,format_nrr) worksheet1.set_row(0,30) worksheet1.set_column('B:B',15,None,{'hidden':1}) worksheet1.set_column('E:F',40,None,{'hidden':1}) worksheet1.set_column('A:A',15) worksheet1.set_column('C:D',15) worksheet1.set_column('G:G',40) worksheet2.write_row('A1',route_title,format_title) worksheet2.merge_range('A2:A11','DMZ-NE40E-1',format_nr) worksheet2.merge_range('B2:B11',host["DMZ-NE40E-1"][0],format_nr) worksheet2.merge_range('C2:C11',host["DMZ-NE40E-1"][1],format_nr) worksheet2.merge_range('A12:A21','DMZ-NE40E-2',format_nr) worksheet2.merge_range('B12:B21',host["DMZ-NE40E-2"][0],format_nr) worksheet2.merge_range('C12:C21',host["DMZ-NE40E-2"][1],format_nr) worksheet2.write_column('D2',route_jc,format_nrr) worksheet2.write_column('D12',route_jc,format_nrr) worksheet2.write_column('E2',route_cmd,format_nrr) worksheet2.write_column('E12',route_cmd,format_nrr) worksheet2.write_column('F2',route_sm,format_nrr) worksheet2.write_column('F12',route_sm,format_nrr) worksheet2.set_row(0,30) worksheet2.set_column('B:B',15,None,{'hidden':1}) worksheet2.set_column('E:F',40,None,{'hidden':1}) worksheet2.set_column('A:A',15) worksheet2.set_column('C:D',15) worksheet2.set_column('G:G',40) worksheet3.write_row('A1',fuzai_title,format_title) worksheet3.merge_range('A2:A11','DMZ-RD5412-1',format_nr) worksheet3.merge_range('B2:B11',host["DMZ-RD5412-1"][0],format_nr) worksheet3.merge_range('C2:C11',host["DMZ-RD5412-1"][1],format_nr) worksheet3.merge_range('A12:A21','DMZ-RD5412-2',format_nr) worksheet3.merge_range('B12:B21',host["DMZ-RD5412-2"][0],format_nr) worksheet3.merge_range('C12:C21',host["DMZ-RD5412-2"][1],format_nr) worksheet3.merge_range('A22:A31','SM-RD6420-1',format_nr) worksheet3.merge_range('B22:B31',host["SM-RD6420-1"][0],format_nr) worksheet3.merge_range('C22:C31',host["SM-RD6420-1"][1],format_nr) worksheet3.merge_range('A32:A41','SM-RD6420-2',format_nr) worksheet3.merge_range('B32:B41',host["SM-RD6420-2"][0],format_nr) worksheet3.merge_range('C32:C41',host["SM-RD6420-2"][1],format_nr) worksheet3.write_column('D2',fuzai_jc,format_nrr) worksheet3.write_column('D12',fuzai_jc,format_nrr) worksheet3.write_column('D22',fuzai_jc,format_nrr) worksheet3.write_column('D32',fuzai_jc,format_nrr) worksheet3.write_column('E2',fuzai_cmd,format_nrr) worksheet3.write_column('E12',fuzai_cmd,format_nrr) worksheet3.write_column('E22',fuzai_cmd,format_nrr) worksheet3.write_column('E32',fuzai_cmd,format_nrr) worksheet3.write_column('F2',fuzai_sm,format_nrr) worksheet3.write_column('F12',fuzai_sm,format_nrr) worksheet3.write_column('F22',fuzai_sm,format_nrr) worksheet3.write_column('F32',fuzai_sm,format_nrr) worksheet3.set_row(0,30) worksheet3.set_column('B:B',15,None,{'hidden':1}) worksheet3.set_column('E:F',40,None,{'hidden':1}) worksheet3.set_column('A:A',15) worksheet3.set_column('C:D',15) worksheet3.set_column('G:G',40) jcx=[u'日志','dis logbuffer | in [date]',u'填寫(xiě)異常日志,無(wú)異常則填寫(xiě)“正?!?] jcx1=[u'日志','dis logbuffer reverse | in [date]',u'填寫(xiě)異常日志,無(wú)異常則填寫(xiě)“正?!?] jcx2=[u'日志','sh logging last 30',u'查看日志,無(wú)異常則填寫(xiě)“正?!?] fuzai_jcx=[u'日志','/i/sys/log',u'填寫(xiě)異常日志,無(wú)異常則填寫(xiě)“正?!?] worksheet1.write_row('D14',jcx,format_bottom) worksheet1.write_row('D27',jcx,format_bottom) worksheet1.write_row('D40',jcx,format_bottom) worksheet1.write_row('D52',jcx1,format_bottom) worksheet1.write_row('D65',jcx2,format_bottom) worksheet1.write_row('D78',jcx2,format_bottom) worksheet2.write_row('D11',jcx,format_bottom) worksheet2.write_row('D21',jcx,format_bottom) worksheet3.write_row('D11',fuzai_jcx,format_bottom) worksheet3.write_row('D21',fuzai_jcx,format_bottom) worksheet3.write_row('D31',fuzai_jcx,format_bottom) worksheet3.write_row('D41',fuzai_jcx,format_bottom) # 這邊開(kāi)始根據(jù)之前與設(shè)備交互所得到的數(shù)據(jù)文件內(nèi)容來(lái)填格子了。 #------------------------------------------------ #----------firewall_ip1---------------- #------------------------------------------------ try: hang=1 temp=[] hang_list=cmd("HRP_M<JSYD-WX-12580-DMZ-E8000E-1>",file_01) rules=[] g=0 with open(file_01) as f: for each_line in f: num=each_line.split() if hang > int(hang_list[1]) and hang < int(hang_list[2]): if int(hang_list[2])-int(hang_list[1]) == 6: worksheet0.write('G2',u'正常',format_rt) else: worksheet0.write('G2','ERROR',format_red) if hang > int(hang_list[2]) and hang < int(hang_list[3]): if num!=[]: if num[0] == 'HUAWEI': worksheet0.write('G3',u'%s天,%s小時(shí)'%(num[4],num[6]),format_rt) if hang > int(hang_list[3]) and hang < int(hang_list[4]): if num!=[]: if len(num) == 11: temp.append(num[-1]) if hang > int(hang_list[4]) and hang < int(hang_list[5]): if num!=[]: if ',' in num[0]: total=num[0].replace(',','')+' KB '+num[3].replace(',','')+' KB)' worksheet0.write('G5',total,format_rt) if hang > int(hang_list[5]) and hang < int(hang_list[6]): if num!=[]: if num[0] == 'Memory': worksheet0.write('G7',num[-1],format_rt) if hang > int(hang_list[6]) and hang < int(hang_list[7]): if num!=[]: if num[0] == 'Role:': if num[1] == 'active,' and num[-1] == 'standby': worksheet0.write('G8',u'正常',format_rt) else: worksheet0.write('G8',u'有',format_red) if hang > int(hang_list[7]) and hang < int(hang_list[8]): if num!=[]: if num[0] == 'Current': worksheet0.write('G9',str(num[-1]),format_rt) if hang > int(hang_list[8]) and hang < int(hang_list[9]): if num!=[]: if num[0] == 'Destinations' and len(num) == 10: worksheet0.write('G10',str(num[2]),format_rt) if hang > int(hang_list[9]) and hang < int(hang_list[10]): if num!=[]: if len(num) == 7: if num[1] == 'up': g+=1 if hang > int(hang_list[10]) and hang < int(hang_list[14]): if num!=[]: if num[0] == 'Advanced': rules.append(num[3]) if hang > int(hang_list[14]) and hang < int(hang_list[15]): if int(hang_list[-2])-int(hang_list[-3]) == 8: worksheet0.write('G13',u'無(wú)告警',format_rt) else: worksheet0.write('G13',u'有告警',format_red) if hang > int(hang_list[15]) and hang < int(hang_list[16]): pass hang = hang + 1 temp.sort() worksheet0.write('G4',u'%s℃-%s℃'%(temp[0],temp[-1]),format_rt) worksheet0.write('G6',None,format_rt) worksheet0.write('G11',g,format_rt) worksheet0.write('G12','%s+%s+%s+%s=%d'%(rules[0],rules[1],rules[2],rules[3],int(rules[0])+int(rules[1])+int(rules[2])+int(rules[3])),format_rt) worksheet0.write('G14',u'正常',format_right) except IOError as reason: print "01DMZ-E8000E.py "+str(reason) #------------------------------------------------ #----------firewall_iP2---------------- #------------------------------------------------ try: hang=1 state=dict() hang_list=cmd("<W-12580-M9006>",file_02_2) temp=[] rules=0 mem=[] g=0 all=0 n=0 level=0 q=0 status=0 type=0 with open(file_02_2) as f: for each_line in f: num=each_line.split() if hang > int(hang_list[0]) and hang < int(hang_list[1]): if num!=[]: if num[0].isdigit() and len(num) == 7: if num[3] == 'Absent': if num[2] != 'NONE': type=1 if hang > int(hang_list[1]) and hang < int(hang_list[2]): if num!=[]: if len(num) == 13: worksheet0.write('G16',u'%d天,%s小時(shí)'%(int(num[5])*7+int(num[7]),num[9]),format_rt) if hang > int(hang_list[2]) and hang < int(hang_list[3]): if num!=[]: if len(num) == 9: temp.append(num[4]) if hang > int(hang_list[3]) and hang < int(hang_list[4]): if num!=[]: if len(num) == 6: total='%s KB %s KB)'%(num[0],num[3]) worksheet0.write('G18',total,format_rt) if hang > int(hang_list[4]) and hang < int(hang_list[5]): if num!=[]: if len(num) == 8: if num[-1] != 'KB:': result='%.1f%%'%(100-float(num[-1].split('%')[0])) mem.append(result) if hang > int(hang_list[5]) and hang < int(hang_list[6]): if num!=[]: if 'GigabitEthernet' in num[1]: if num[2] != 'UP': status+=1 if 'GigabitEthernet' in num[0]: if num[1] != 'UP': status+=1 if hang > int(hang_list[6]) and hang < int(hang_list[7]): if num!=[]: if num[0].isdigit() and len(num) == 5: if num[3] != 'Primary' and num[3] != 'Secondary': q=1 if hang > int(hang_list[7]) and hang < int(hang_list[8]): if num!=[]: if num[0].isdigit() and len(num) == 9: g+=1 if hang > int(hang_list[8]) and hang < int(hang_list[9]): if num!=[]: if num[0] == 'Summary': state[n]=num[3] n+=1 if hang > int(hang_list[9]) and hang < int(hang_list[10]): if num!=[]: if len(num) >= 4 and num[1] == 'UP': all+=1 if hang > int(hang_list[10]) and hang < int(hang_list[12]): if num!=[]: if num[0] == 'rule': rules+=1 if hang > int(hang_list[12]) and hang < int(hang_list[13]): if num!=[]: if num[0].isdigit() and len(num) >5: if num[3] != 'INFO': level=1 if hang > int(hang_list[13]) and hang < int(hang_list[14]): pass hang+=1 temp.sort() mem.sort() if type == 0: worksheet0.write('G15',u'正常',format_rt) else: worksheet0.write('G15','ERROR',format_red) worksheet0.write('G17',u'%s℃-%s℃'%(temp[0],temp[-1]),format_rt) worksheet0.write('G19',None,format_rt) worksheet0.write('G20','%s-%s'%(mem[0],mem[-1]),format_rt) if status == 0: worksheet0.write('G21',u'正常',format_rt) else: worksheet0.write('G21',status,format_rt) if q == 0: worksheet0.write('G22',u'正常',format_rt) else: worksheet0.write('G22',u'有',format_red) worksheet0.write('G23',g,format_rt) worksheet0.write('G24',state[0],format_rt) worksheet0.write('G25',all,format_rt) worksheet0.write('G26','%d'%rules,format_rt) if level == 1: worksheet0.write('G27','ERROR',format_red) else: worksheet0.write('G27',u'無(wú)告警',format_rt) worksheet0.write('G28',u'正常',format_right) except IOError as reason: print "02DMZ-M9006.py "+str(reason) #------------------------------------------------ #----------firewall_ip3---------------- #------------------------------------------------ try: hang=1 state=dict() hang_list=cmd("<W-SM-M9006>",file_02_1) temp=[] rules=[] mem=[] g=0 all=0 n=0 level=0 q=0 status=0 type=0 with open(file_02_1) as f: for each_line in f: num=each_line.split() if hang > int(hang_list[0]) and hang < int(hang_list[1]): if num!=[]: if num[0].isdigit() and len(num) == 7: if num[3] == 'Absent': if num[2] != 'NONE': type=1 if hang > int(hang_list[1]) and hang < int(hang_list[2]): if num!=[]: if len(num) == 13: worksheet0.write('G30',u'%d天,%s小時(shí)'%(int(num[5])*7+int(num[7]),num[9]),format_rt) if hang > int(hang_list[2]) and hang < int(hang_list[3]): if num!=[]: if len(num) == 9: temp.append(num[4]) if hang > int(hang_list[3]) and hang < int(hang_list[4]): if num!=[]: if len(num) == 6: total='%s KB %s KB)'%(num[0],num[3]) worksheet0.write('G32',total,format_rt) if hang > int(hang_list[4]) and hang < int(hang_list[5]): if num!=[]: if len(num) == 8: if num[-1] != 'KB:': result='%.1f%%'%(100-float(num[-1].split('%')[0])) mem.append(result) if hang > int(hang_list[5]) and hang < int(hang_list[6]): if num!=[]: if 'GigabitEthernet' in num[1]: if num[2] != 'UP': status=1 if 'GigabitEthernet' in num[0]: if num[1] != 'UP': status=1 if hang > int(hang_list[6]) and hang < int(hang_list[7]): if num!=[]: if num[0].isdigit() and len(num) == 5: if num[3] != 'Primary' and num[3] != 'Secondary': q=1 if hang > int(hang_list[7]) and hang < int(hang_list[8]): if num!=[]: if num[0].isdigit() and len(num) == 9: g+=1 if hang > int(hang_list[8]) and hang < int(hang_list[9]): if num!=[]: if num[0] == 'Summary': state[n]=num[3] n+=1 if hang > int(hang_list[9]) and hang < int(hang_list[10]): if num!=[]: if len(num) >= 4 and num[1] == 'UP': all+=1 if hang > int(hang_list[10]) and hang < int(hang_list[12]): if num!=[]: if num[0] == 'Advanced': rules.append(num[5]) if hang > int(hang_list[12]) and hang < int(hang_list[13]): if num!=[]: if num[0].isdigit() and len(num) >5: if num[3] != 'INFO': level=1 if hang > int(hang_list[13]) and hang < int(hang_list[14]): pass hang+=1 temp.sort() mem.sort() if type == 0: worksheet0.write('G29',u'正常',format_rt) else: worksheet0.write('G29','ERROR',format_red) worksheet0.write('G31',u'%s℃-%s℃'%(temp[0],temp[-1]),format_rt) worksheet0.write('G33',None,format_rt) worksheet0.write('G34','%s-%s'%(mem[0],mem[-1]),format_rt) if status == 0: worksheet0.write('G35',u'正常',format_rt) else: worksheet0.write('G35','ERROR',format_red) if q == 0: worksheet0.write('G36',u'正常',format_rt) else: worksheet0.write('G36',u'有',format_red) worksheet0.write('G37',g,format_rt) worksheet0.write('G38',state[0],format_rt) worksheet0.write('G39',all,format_rt) worksheet0.write('G40','%s+%s=%d'%(rules[0],rules[1],int(rules[0])+int(rules[1])),format_rt) if level == 1: worksheet0.write('G41','ERROR',format_red) else: worksheet0.write('G41',u'無(wú)告警',format_rt) worksheet0.write('G42',u'正常',format_right) except IOError as reason: print "03SM-M9006.py "+str(reason) #------------------------------------------------ #----------firewall_ip4---------------- #------------------------------------------------ try: hang=1 g=0 hang_list=cmd("W-IN-FG3950-1 #",file_03) with open(file_03) as f: for each_line in f: num=each_line.split() if hang > int(hang_list[0]) and hang < int(hang_list[1]): if num!=[]: if num[0] == 'Memory': worksheet0.write('G45',num[2],format_rt) if len(num) == 8 and num[1] == 'Uptime:': worksheet0.write('G43',u'%s天,%s小時(shí)'%(num[2],num[4]),format_rt) if num[0] == 'Average': if num[1] == 'network': worksheet0.write('G46',num[-5],format_rt) if hang > int(hang_list[1]) and hang < int(hang_list[2]): if num!=[]: if num[0] == "misc": session_count=num[2].split('=') setup_rate=num[3].split('=') worksheet0.write('G47',session_count[-1],format_rt) worksheet0.write('G48',setup_rate[-1],format_rt) if hang > int(hang_list[2]) and hang < int(hang_list[3]): if num!=[]: if 'S' in num[0] and len(num) >= 6: g+=1 hang+=1 worksheet0.write('G51',g,format_rt) worksheet0.write('G44',None,format_rt) worksheet0.write('G49',None,format_rt) worksheet0.write('G50',None,format_rt) worksheet0.write('G52',None,format_rt) worksheet0.write('G53',None,format_rt) worksheet0.write('G54',None,format_right) except IOError as reason: print "04IN-FG3950B.py "+str(reason) #------------------------------------------------ #------------switch_ip5---------------- #------------switch_ip6---------------- #------------------------------------------------ try: for i in range(2): hang=1 alarm=0 state=0 status=0 alm=0 temp_list=[] index={0:list(range(2,15)),1:list(range(15,28))} file='/usr/sh/shell/linux/xunjian/'+str(today)+'/0'+str(i+5)+'DMZ-S9306-'+str(i+1)+'.txt' hang_list=cmd('<JSYD-WX-12580-DMZ-9306-%d>'%(i+1),file) with open(file) as f: for each_line in f: num=each_line.split() if hang > int(hang_list[1]) and hang < int(hang_list[2]): if num!=[]: if len(num) == 8 and num[1] == '-': if num[-2] != 'Normal': alarm=1 if hang > int(hang_list[2]) and hang < int(hang_list[3]): if num!=[]: if num[0] == 'Quidway': worksheet1.write('G'+str(index[i][1]),u'%d天, %s小時(shí)'%(int(num[7])*7+int(num[9]),num[11]),format_rt) if hang > int(hang_list[3]) and hang < int(hang_list[4]): if num!=[]: if len(num) == 6 and num[1] == 'KB': mem=num[0].split(',') free=num[3].split(',') worksheet1.write('G'+str(index[i][2]),'%s KB %s KB)'%(mem[0]+mem[1],free[0]+free[1]),format_rt) if hang > int(hang_list[4]) and hang < int(hang_list[5]): if num!=[]: if len(num) == 6 and num[4] == 'Max:': worksheet1.write('G'+str(index[i][3]),num[3],format_rt) if hang > int(hang_list[5]) and hang < int(hang_list[6]): if num!=[]: if len(num) == 5 and num[0] == 'Memory': worksheet1.write('G'+str(index[i][4]),num[-1],format_rt) if hang > int(hang_list[6]) and hang < int(hang_list[7]): if num!=[]: if len(num) >=6 and num[1] == 'up': state+=1 if hang > int(hang_list[7]) and hang < int(hang_list[8]): if num!=[]: if num[0].isdigit() and len(num) == 5: if i == 0 and num[1] != 'Master': status=1 if i == 1 and num[1] != 'Backup': status=1 if hang > int(hang_list[8]) and hang < int(hang_list[9]): if num!=[]: if num[0] == 'Total': worksheet1.write('G'+str(index[i][7]),num[-1],format_rt) if hang > int(hang_list[9]) and hang < int(hang_list[10]): if num!=[]: if num[0] == 'Dynamic:': worksheet1.write('G'+str(index[i][8]),num[1],format_rt) if hang > int(hang_list[10]) and hang < int(hang_list[11]): if num!=[]: if num[0] == 'Destinations' and len(num) == 10: worksheet1.write('G'+str(index[i][9]),num[2],format_rt) if hang > int(hang_list[11]) and hang < int(hang_list[12]): if num!=[]: if len(num) >= 6 and num[-5].isdigit(): temp=num[-1].split('.') temp_list.append(temp[0]) if hang > int(hang_list[12]) and hang < int(hang_list[13]): if num!=[]: if len(num) == 2 and num[0] == 'NO' and num[1] == 'alarm': alm = 1 if hang > int(hang_list[13]) and hang < int(hang_list[14]): if num!=[]: pass hang+=1 temp_list.sort() if alarm == 0: worksheet1.write('G'+str(index[i][0]),u'正常',format_rt) else: worksheet1.write('G'+str(index[i][0]),'ERROR',format_red) worksheet1.write('G'+str(index[i][5]),state,format_rt) if i == 0: if status == 0: worksheet1.write('G'+str(index[i][6]),'Master',format_rt) else: worksheet1.write('G'+str(index[i][6]),'No Master',format_red) else: if status == 0: worksheet1.write('G'+str(index[i][6]),'Backup',format_rt) else: worksheet1.write('G'+str(index[i][6]),'No Backup',format_red) worksheet1.write('G'+str(index[i][10]),u'%s℃-%s℃'%(temp_list[0],temp_list[-1]),format_rt) if alm == 1: worksheet1.write('G'+str(index[i][11]),u'無(wú)告警',format_rt) else: worksheet1.write('G'+str(index[i][11]),u'有告警',format_red) worksheet1.write('G'+str(index[i][12]),u'正常',format_right) except IOError as reason: print "05_06DMZ-S9306.py "+str(reason) #------------------------------------------------ #------------switch_ip7---------------- #------------switch_ip8---------------- #------------------------------------------------ try: fi_list=['07DMZ-S12508.txt'] fi_name=['<W-DMZ-G1G2-12508>'] state=[] for i in range(1): hang=1 file='/usr/sh/shell/linux/xunjian/'+str(today)+'/'+fi_list[i] hang_list=cmd(fi_name[i],file) brd_status=['Master','Slave','Absent'] brd=0 link=0 Master=0 Backup=0 count=[] temp=[] alarm=0 status=0 index={0:list(range(28,41))} with open(file) as f: for each_line in f: num=each_line.split() if hang > int(hang_list[1]) and hang < int(hang_list[2]): if num!=[]: if num[0].isdigit() and len(num) == 4: if num[2] not in brd_status: brd=1 if hang > int(hang_list[2]) and hang < int(hang_list[3]): if num!=[]: if len(num) == 12: worksheet1.write('G'+str(index[i][1]),u'%d天, %s小時(shí)'%(int(num[4])*7+int(num[6]),num[8]),format_rt) if hang > int(hang_list[3]) and hang < int(hang_list[4]): if num!=[]: if len(num) == 6 and num[1] == 'KB': worksheet1.write('G'+str(index[i][2]),'%s KB %s KB)'%(num[0],num[3]),format_rt) if hang > int(hang_list[4]) and hang < int(hang_list[5]): if num!=[]: if num[0] == 'Used': worksheet1.write('G'+str(index[i][4]),num[-1],format_rt) if hang > int(hang_list[5]) and hang < int(hang_list[6]): if num!=[]: if 'GigabitEthernet' in num[1]: if num[2] != 'UP': status+=1 if 'GigabitEthernet' in num[0]: if num[1] != 'UP': status+=1 if hang > int(hang_list[6]) and hang < int(hang_list[7]): if num!=[]: if len(num) >=2 and num[1] == 'UP': link+=1 #if num[0] == '----' and num[5] == 'UP': # link+=1 if hang > int(hang_list[7]) and hang < int(hang_list[8]): if num!=[]: if num[0].isdigit(): worksheet1.write('G'+str(index[i][7]),num[0],format_rt) if hang > int(hang_list[8]) and hang < int(hang_list[9]): if num!=[]: if num[0] == 'Total' and num[-1].isdigit(): worksheet1.write('G'+str(index[i][8]),num[-1],format_rt) if hang > int(hang_list[9]) and hang < int(hang_list[11]): if num!=[]: if num[0] == 'Summary' and num[-1].isdigit(): count.append(num[-1]) if hang > int(hang_list[11]) and hang < int(hang_list[12]): pass if hang > int(hang_list[12]) and hang < int(hang_list[13]): if num!=[]: if len(num) >= 8: if num[3].isdigit(): temp.append(num[3]) if num[0] == '----' and num[1] == 'More': temp.append(num[7]) if hang > int(hang_list[13]) and hang < int(hang_list[14]): if num!=[]: if num[0] == 'No' and num[1] == 'alarm': alarm=1 if hang > int(hang_list[14]) and hang < int(hang_list[15]): if num!=[]: pass hang+=1 temp.sort() if brd == 0: worksheet1.write('G'+str(index[i][0]),u'正常',format_rt) else: worksheet1.write('G'+str(index[i][0]),'ERROR',format_red) if status == 0: worksheet1.write('G'+str(index[i][5]),u'正常',format_rt) else: worksheet1.write('G'+str(index[i][5]),status,format_rt) worksheet1.write('G'+str(index[i][3]),None,format_rt) worksheet1.write('G'+str(index[i][6]),link,format_rt) worksheet1.write('G'+str(index[i][9]),int(count[1])+int(count[-2]),format_rt) worksheet1.write('G'+str(index[i][10]),u'%s℃-%s℃'%(temp[0],temp[-1]),format_rt) if alarm == 1: worksheet1.write('G'+str(index[i][11]),u'無(wú)告警',format_rt) else: worksheet1.write('G'+str(index[i][11]),'Error',format_red) worksheet1.write('G'+str(index[i][12]),u'正常',format_right) except IOError as reason: print "07_08-S12508-01.py"+str(reason) try: fi_list=['08IN-S12508.txt'] fi_name=['<W-IN-G7G8-12508>'] state=[] for i in range(1): hang=1 file='/usr/sh/shell/linux/xunjian/'+str(today)+'/'+fi_list[i] hang_list=cmd(fi_name[i],file) brd_status=['Master','Slave','Absent'] brd=0 link=0 Master=0 Backup=0 count=[] temp=[] alarm=0 status=0 index={0:list(range(41,53))} with open(file) as f: for each_line in f: num=each_line.split() if hang > int(hang_list[1]) and hang < int(hang_list[2]): if num!=[]: if num[0].isdigit() and len(num) == 4: if num[2] not in brd_status: brd=1 if hang > int(hang_list[2]) and hang < int(hang_list[3]): if num!=[]: if len(num) == 12: worksheet1.write('G'+str(index[i][1]),u'%d天, %s小時(shí)'%(int(num[4])*7+int(num[6]),num[8]),format_rt) if hang > int(hang_list[3]) and hang < int(hang_list[4]): if num!=[]: if len(num) == 6 and num[1] == 'KB': worksheet1.write('G'+str(index[i][2]),'%s KB %s KB)'%(num[0],num[3]),format_rt) if hang > int(hang_list[4]) and hang < int(hang_list[5]): if num!=[]: if num[0] == 'Used': worksheet1.write('G'+str(index[i][4]),num[-1],format_rt) if hang > int(hang_list[5]) and hang < int(hang_list[6]): if num!=[]: if 'GigabitEthernet' in num[1]: if num[2] != 'UP': status+=1 if 'GigabitEthernet' in num[0]: if num[1] != 'UP': status+=1 if hang > int(hang_list[6]) and hang < int(hang_list[7]): if num!=[]: if len(num) >=2 and num[1] == 'UP': link+=1 #if num[0] == '----' and num[5] == 'UP': # link+=1 if hang > int(hang_list[7]) and hang < int(hang_list[8]): if num!=[]: if num[0].isdigit(): worksheet1.write('G'+str(index[i][7]),num[0],format_rt) if hang > int(hang_list[8]) and hang < int(hang_list[9]): if num!=[]: if num[0] == 'Total' and num[-1].isdigit(): worksheet1.write('G'+str(index[i][8]),num[-1],format_rt) if hang > int(hang_list[9]) and hang < int(hang_list[10]): if num!=[]: if len(num) >= 8: if num[3].isdigit(): temp.append(num[3]) if num[0] == '----' and num[1] == 'More': temp.append(num[7]) if hang > int(hang_list[10]) and hang < int(hang_list[11]): if num!=[]: if num[0] == 'No' and num[1] == 'alarm': alarm=1 if hang > int(hang_list[11]) and hang < int(hang_list[12]): if num!=[]: pass hang+=1 temp.sort() if brd == 0: worksheet1.write('G'+str(index[i][0]),u'正常',format_rt) else: worksheet1.write('G'+str(index[i][0]),'ERROR',format_red) if status == 0: worksheet1.write('G'+str(index[i][5]),u'正常',format_rt) else: worksheet1.write('G'+str(index[i][5]),status,format_rt) worksheet1.write('G'+str(index[i][3]),None,format_rt) worksheet1.write('G'+str(index[i][6]),link,format_rt) worksheet1.write('G'+str(index[i][9]),u'%s℃-%s℃'%(temp[0],temp[-1]),format_rt) if alarm == 1: worksheet1.write('G'+str(index[i][10]),u'無(wú)告警',format_rt) else: worksheet1.write('G'+str(index[i][10]),'Error',format_red) worksheet1.write('G'+str(index[i][11]),u'正常',format_right) except IOError as reason: print "07_08-S12508-02.py"+str(reason) #------------------------------------------------ #------------switch_ip9---------------- #------------switch_ip10---------------- #------------------------------------------------ try: fi_list=['09SM-N7K-1.txt','10SM-N7K-2.txt'] fi_name=['W-SM-N7K-1#','W-SM-N7K-2#'] state=[] for i in range(2): hang=1 file='/usr/sh/shell/linux/xunjian/'+str(today)+'/'+fi_list[i] hang_list=cmd1(fi_name[i],file) index={0:list(range(53,66)),1:list(range(66,79))} count1 = 0 count2 = 0 count3 = 0 temp = [] with open(file) as f: for each_line in f: num=each_line.split() if hang > int(hang_list[0]) and hang < int(hang_list[1]): if num!=[]: if num[1] == 'ok': count1 +=1 if hang > int(hang_list[1]) and hang < int(hang_list[2]): if num!=[]: if num[0] == 'Kernel': uptime = u'%s天,%s小時(shí)'%(num[3],num[5]) if hang > int(hang_list[2]) and hang < int(hang_list[3]): if num!=[]: if len(num) == 3: if num[-1] == 'free': free = num[0] if num[-1] == 'total': total = num[0] if hang > int(hang_list[3]) and hang < int(hang_list[4]): if num!=[]: if len(num) >= 3: if num[2] == 'up' or num[4] == 'up' or num[5] == 'up': count2 +=1 if hang > int(hang_list[4]) and hang < int(hang_list[5]): if num!=[]: pass if hang > int(hang_list[5]) and hang < int(hang_list[6]): if num!=[]: if num[-1].isdigit(): count3 += int(num[-1]) if hang > int(hang_list[6]) and hang < int(hang_list[7]): if num!=[]: if num[-1].isdigit(): worksheet1.write('G'+str(index[i][8]),num[-1],format_rt) if hang > int(hang_list[7]) and hang < int(hang_list[8]): if num!=[]: if len(num) == 5 and num[-1].isdigit(): worksheet1.write('G'+str(index[i][9]),num[-1],format_rt) if hang > int(hang_list[8]) and hang < int(hang_list[9]): if num!=[]: if len(num) >= 6 and num[-2].isdigit(): temp.append(num[-2]) if hang > int(hang_list[9]) and hang < int(hang_list[10]): if num!=[]: if len(num) >=4 and num[0].isdigit(): status = num[2] if hang > int(hang_list[10]) and hang < int(hang_list[11]): if num!=[]: pass hang+=1 temp.sort() worksheet1.write('G'+str(index[i][0]),count1,format_rt) worksheet1.write('G'+str(index[i][1]),uptime,format_rt) worksheet1.write('G'+str(index[i][2]),'%s KB (%s KB)'%(total,free),format_rt) worksheet1.write('G'+str(index[i][3]),None,format_rt) worksheet1.write('G'+str(index[i][4]),None,format_rt) worksheet1.write('G'+str(index[i][5]),count2,format_rt) worksheet1.write('G'+str(index[i][6]),None,format_rt) worksheet1.write('G'+str(index[i][7]),count3,format_rt) worksheet1.write('G'+str(index[i][10]),u'%s℃-%s℃'%(temp[0],temp[-1]),format_rt) if status == 'up': worksheet1.write('G'+str(index[i][11]),u'正常',format_rt) else: worksheet1.write('G'+str(index[i][11]),u'不正常',format_red) worksheet1.write('G'+str(index[i][12]),u'正常',format_right) except Exception as reason: print "09_10SM-N7K.py "+str(reason) #------------------------------------------------ #------------route_ip11---------------- #------------route_ip12---------------- #------------------------------------------------ try: fi_list=['11DMZ-NE40E-1.txt','12DMZ-NE40E-2.txt'] fi_name=['<W-SM-E11-NE40E-01>','<W-SM-E12-NE40E-02>'] device=['dis','NE40E-X8\'s','Slot','-'] status=0 for i in range(2): hang=1 phy=0 temp=[] alarm=0 index={0:list(range(2,12)),1:list(range(12,22))} file='/usr/sh/shell/linux/xunjian/'+str(today)+'/'+fi_list[i] hang_list=cmd(fi_name[i],file) with open(file) as f: for each_line in f: num=each_line.split() if hang > int(hang_list[0]) and hang < int(hang_list[1]): if num!=[]: if num[0] not in device: status=1 if hang > int(hang_list[1]) and hang < int(hang_list[2]): if num!=[]: if num[0] == 'HUAWEI': worksheet2.write('G'+str(index[i][1]),u'%s天,%s小時(shí)'%(num[4],num[6]),format_rt) if hang > int(hang_list[2]) and hang < int(hang_list[3]): if num!=[]: if ',' in num[0]: total=num[0].replace(',','')+' KB '+num[3].replace(',','')+' KB)' worksheet2.write('G'+str(index[i][2]),total,format_rt) if hang > int(hang_list[3]) and hang < int(hang_list[4]): if num!=[]: if num[0] == 'Memory' and len(num) == 5: worksheet2.write('G'+str(index[i][4]),num[-1],format_rt) if hang > int(hang_list[4]) and hang < int(hang_list[5]): if num!=[]: if len(num) == 7 and num[1] == 'up': phy+=1 if hang > int(hang_list[5]) and hang < int(hang_list[6]): if num!=[]: if num[0] == 'Destinations' and len(num) == 10: worksheet2.write('G'+str(index[i][6]),num[2],format_rt) if hang > int(hang_list[6]) and hang < int(hang_list[7]): if num!=[]: if len(num) >= 7 and num[-1].isdigit(): temp.append(num[-1]) if hang > int(hang_list[7]) and hang < int(hang_list[8]): if num!=[]: if num[0] == 'NO' and num[1] == 'alarm': alarm=1 if hang > int(hang_list[8]) and hang < int(hang_list[9]): if num!=[]: pass hang+=1 temp.sort() if status == 0: worksheet2.write('G'+str(index[i][0]),u'正常',format_rt) else: worksheet2.write('G'+str(index[i][0]),'Error',format_red) worksheet2.write('G'+str(index[i][3]),None,format_rt) worksheet2.write('G'+str(index[i][5]),phy,format_rt) worksheet2.write('G'+str(index[i][7]),u'%s℃-%s℃'%(temp[0],temp[-1]),format_rt) if alarm == 1: worksheet2.write('G'+str(index[i][8]),u'無(wú)告警',format_rt) else: worksheet2.write('G'+str(index[i][8]),'Error',format_red) worksheet2.write('G'+str(index[i][9]),u'正常',format_right) except IOError as reason: print "11_12.py "+str(reason) #------------------------------------------------ #------------fuzai_ip13----------------- #------------fuzai_ip14----------------- #------------fuzai_ip15----------------- #------------fuzai_ip16----------------- #------------------------------------------------ try: fi_list=['13DMZ-RD5412-1.txt','14DMZ-RD5412-2.txt','15SM-RD6420-1.txt','16SM-RD6420-2.txt'] fi_name='>> ' state=[] for i in range(4): hang=1 status=0 link=0 temp=[] Master=0 Backup=0 index={0:list(range(2,12)),1:list(range(12,22)),2:list(range(22,32)),3:list(range(32,42))} file='/usr/sh/shell/linux/xunjian/'+str(today)+'/'+fi_list[i] hang_list=cmd(fi_name,file) with open(file) as f: for each_line in f: num=each_line.split() if hang > int(hang_list[0]) and hang < int(hang_list[1]): if num!=[]: if num[0] == 'Switch': worksheet3.write('G'+str(index[i][0]),u'%s天,%s時(shí)'%(num[3],num[5]),format_rt) if hang > int(hang_list[1]) and hang < int(hang_list[2]): if num!=[]: if num[0] == 'Dual': if num[-1] == "OK": worksheet3.write('G'+str(index[i][1]),u'正常',format_rt) else: worksheet3.write('G'+str(index[i][1]),'Error',format_red) if hang > int(hang_list[2]) and hang < int(hang_list[3]): if num!=[]: if num[0].isdigit() and len(num) == 3: if num[-1] != 'Operational': status=1 if hang > int(hang_list[3]) and hang < int(hang_list[4]): if num!=[]: if num[0].isdigit() and len(num) == 7: if num[-1] == 'up': link+=1 if hang > int(hang_list[4]) and hang < int(hang_list[5]): if num!=[]: if num[0] == 'Real' and num[1] == 'Servers' and len(num) == 4: Real_Servers=num[-1].split('(')[-1].split(')')[0] if num[0] == 'Server' and num[1] == 'Groups' and len(num) == 4: Server_Groups=num[-1] if num[0] == 'Virtual' and num[1] == 'Servers' and len(num) == 4: Virtual_Servers=num[-1].split('(')[-1].split(')')[0] if num[0] == 'Filters' and len(num) == 3: Filters=num[-1].split('(')[-1].split(')')[0] if hang > int(hang_list[5]) and hang < int(hang_list[6]): if num!=[]: if num[0] == 'cpuUtil1Second:': worksheet3.write('G'+str(index[i][5]),num[-1],format_rt) if hang > int(hang_list[6]) and hang < int(hang_list[7]): if num!=[]: if num[0] == 'Total:': Total=int(num[-2]) if num[0] == 'Free:': Free=int(num[-2]) if hang > int(hang_list[7]) and hang < int(hang_list[8]): if num!=[]: if num[0] == 'Sensor' and len(num) == 6: temp.append(num[3]) if hang > int(hang_list[8]) and hang < int(hang_list[9]): if num!=[]: if len(num) == 10: if num[-1] == 'master': Master+=1 if num[-1] == 'backup': Backup+=1 if hang > int(hang_list[9]) and hang < int(hang_list[10]): if num!=[]: pass hang+=1 state.append(Master) state.append(Backup) if status == 0: worksheet3.write('G'+str(index[i][2]),u'正常',format_rt) else: worksheet3.write('G'+str(index[i][2]),'Error',format_red) worksheet3.write('G'+str(index[i][3]),link,format_rt) worksheet3.write('G'+str(index[i][4]),'%s/%s/%s/%s'%(Real_Servers,Server_Groups,Virtual_Servers,Filters),format_rt) worksheet3.write('G'+str(index[i][6]),'%.2f%%'%(float(Total-Free)/Total*100),format_rt) worksheet3.write('G'+str(index[i][7]),temp[0],format_rt) worksheet3.write('G'+str(index[i][9]),u'正常',format_right) if state[0] == state[3]: worksheet3.write('G10','master',format_rt) worksheet3.write('G20','backup',format_rt) else: worksheet3.write('G10','Error',format_red) worksheet3.write('G20','Error',format_red) if state[4] == state[-1]: worksheet3.write('G30','master',format_rt) worksheet3.write('G40','backup',format_rt) else: worksheet3.write('G30','Error',format_red) worksheet3.write('G40','Error',format_red) except IOError as reason: print "13_16-RD5412-6420.py"+str(reason) workbook.close()
5、總腳本入口
wlxj.sh # 總的腳本入口
#!/bin/bash #-----------網(wǎng)絡(luò)巡檢-------------------- dir=/usr/sh/shell/linux/xunjian/python_shell dir1=/usr/sh/shell/linux/xunjian if [ ! -d $dir1/$(date '+%Y%m%d') ];then mkdir -p $dir1/$(date '+%Y%m%d') fi _shell() { pass='哈哈哈我是密碼1' password='哈哈哈我是密碼2' ps1='哈哈哈哈我是密碼3' /usr/bin/python $dir/01DMZ-E8000E.py 'ip1' $pass $password /usr/bin/python $dir/02_03-M9006.py 'ip2' $pass $password /usr/bin/python $dir/02_03-M9006.py 'ip3' $pass $password /usr/bin/python $dir/04IN-FG3950B.py 'ip4' $password /usr/bin/python $dir/05_06DMZ-S9306.py 'ip5' $pass $password /usr/bin/python $dir/05_06DMZ-S9306.py 'ip6' $pass $password /usr/bin/python $dir/07_08-S12508.py 'ip7' $pass $password /usr/bin/python $dir/07_08-S12508.py 'ip8' $pass $password /usr/bin/python $dir/09_10SM-N7K.py 'ip9' $ps1 /usr/bin/python $dir/09_10SM-N7K.py 'ip10' $ps1 /usr/bin/python $dir/11_12DMZ-NE40E.py 'ip11' $password /usr/bin/python $dir/11_12DMZ-NE40E.py 'ip12' $password /usr/bin/python $dir/13_16-RD5412_6420.py 'ip13' $password /usr/bin/python $dir/13_16-RD5412_6420.py 'ip14' $password /usr/bin/python $dir/13_16-RD5412_6420.py 'ip15' $password /usr/bin/python $dir/13_16-RD5412_6420.py 'ip16' $password } aa=`ls -l $dir1/$(date '+%Y%m%d') | wc -l` Year=$(date '+%Y') Month=$(date '+%m') Day=$(date '+%d') if [ $Month -lt 10 ];then Month=`echo $Month | sed 's/0//g'` fi if [ $Day -lt 10 ];then Day=`echo $Day | sed 's/0//g'` fi tday=$(date '+%Y.%m.%d') new_tday="$Year.$Month.$Day" zip_tday="$Month.$Day" _shell # 這邊尷尬了,輸出的文件有的格式有問(wèn)題,就得改改了 cp -a $dir1/$(date '+%Y%m%d')/02DMZ-M9006.txt $dir1/$(date '+%Y%m%d')/02DMZ-M9006.txt.bak cat $dir1/$(date '+%Y%m%d')/02DMZ-M9006.txt.bak | tr -s "\r\n" "\n" > $dir1/$(date '+%Y%m%d')/02DMZ-M9006.txt cp -a $dir1/$(date '+%Y%m%d')/03SM-M9006.txt $dir1/$(date '+%Y%m%d')/03SM-M9006.txt.bak cat $dir1/$(date '+%Y%m%d')/03SM-M9006.txt.bak | tr -s "\r\n" "\n" > $dir1/$(date '+%Y%m%d')/03SM-M9006.txt # 得到excel 文件 /usr/bin/python $dir/wangluo_xunjian.py > /dev/null 2>&1 if [ -f $dir1/$(date '+%Y%m%d')/網(wǎng)絡(luò)設(shè)備巡檢-$tday.xlsx ];then sed -i 's/Cmcc.*$//g' $dir1/$(date '+%Y%m%d')/*.txt zip -qj $dir1/$(date '+%Y%m%d')/$zip_tday.zip $dir1/$(date '+%Y%m%d')/*.txt >/dev/null if [ $? -ne 0 ];then /usr/bin/python $dir/mail_zip_error.py >/dev/null 2>&1 else mv $dir1/$(date '+%Y%m%d')/網(wǎng)絡(luò)設(shè)備巡檢-$tday.xlsx $dir1/$(date '+%Y%m%d')/網(wǎng)絡(luò)設(shè)備巡檢-$new_tday.xlsx /usr/bin/python $dir/mail.py xixixi@139.com "收件人,多個(gè)以分號(hào)分隔" "$dir1/$(date '+%Y%m%d')/網(wǎng)絡(luò)設(shè)備巡檢-$new_tday.xlsx" "$dir1/$(date '+%Y%m%d')/$zip_tday.zip" fi else /usr/bin/python $dir/mail_excel_error.py >/dev/null 2>&1 fi
6、加入定時(shí)任務(wù)
我自己定的每天上午9點(diǎn)
7、成品圖
以上這篇對(duì)Python 網(wǎng)絡(luò)設(shè)備巡檢腳本的實(shí)例講解就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
python實(shí)現(xiàn)隨機(jī)漫步方法和原理
在本篇文章里小編給大家整理了關(guān)于python如何實(shí)現(xiàn)隨機(jī)漫步的相關(guān)知識(shí)點(diǎn)內(nèi)容,需要的朋友們學(xué)習(xí)下。2019-06-06Pycharm中pyqt工具配置(Qt Designer、PyUIC、PyRCC)
Pycharm中進(jìn)行擴(kuò)展工具設(shè)置,從而實(shí)現(xiàn)在pycharm中打開(kāi)Qt Designer、Ui文件生成Py文件、資源文件生成Py文件三個(gè)功能,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07Jupyter Notebook調(diào)用指定的虛擬環(huán)境的實(shí)現(xiàn)示例
本文主要介紹了Jupyter Notebook調(diào)用指定的虛擬環(huán)境的實(shí)現(xiàn)示例,,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07Python中判斷input()輸入的數(shù)據(jù)的類(lèi)型
在pyhton中,經(jīng)常會(huì)用到input()語(yǔ)句,但是input()語(yǔ)句輸入的內(nèi)容只能是字符串類(lèi)型,而我們經(jīng)常要輸入int類(lèi)型的數(shù)據(jù)等,這個(gè)時(shí)候就需要用到int()方法給輸入的內(nèi)容強(qiáng)制轉(zhuǎn)換,今天小編給大家介紹下Python中判斷input()輸入的數(shù)據(jù)的類(lèi)型,感興趣的朋友跟隨小編一起看看吧2022-11-11淺析Python數(shù)字類(lèi)型和字符串類(lèi)型的內(nèi)置方法
這篇文章主要介紹了Python數(shù)字類(lèi)型和字符串類(lèi)型的內(nèi)置方法,本文通過(guò)實(shí)例代碼講解的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-12-12Python實(shí)現(xiàn)發(fā)票自動(dòng)校核微信機(jī)器人的方法
這篇文章主要介紹了Python實(shí)現(xiàn)發(fā)票自動(dòng)校核微信機(jī)器人的方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05關(guān)于python并發(fā)編程中的協(xié)程
協(xié)程是一種輕量級(jí)的并發(fā)方式,它是在用戶(hù)空間中實(shí)現(xiàn)的,并不依賴(lài)于操作系統(tǒng)的調(diào)度,協(xié)程可以在同一個(gè)線程中實(shí)現(xiàn)并發(fā),不需要進(jìn)行上下文切換,因此執(zhí)行效率非常高,需要的朋友可以參考下2023-04-04