概述
脚本功能功能是全程模拟了人的手工巡检,并收集数据,处理后发送邮件。主要分为远程到交换机,查看转换机状态如:show process cpu | in CPU utilization查看cpu占用率;将查询后的结果记录并保存下来,如结果;11%;读取查询的数据文件;将文件中的数据如11%提取部分需要计算出来;创建excel表格,将上一步获取到的数据填写到表格中;编写固定格式的邮件内容,并将保存好的excel表格附到邮件中发送;编写crontab定时任务,实现全程自动化。
流程图

'''
Author:myfu
Date:2019-08-26
E-mail:myfu@****.com
'''
importpexpect
importsys
importtime
importos
importxlwt
defcisco_check():
ip=["10.3.240.14","10.3.240.15","10.3.240.17","10.3.240.20","10.3.240.21"]
name=["SZNS-KJY4F-ACS-05#","SZNS-KJY4F-ACS-06#","SZNS-KJY4F-ACS-08#","SZNS-KJY9F-ACS-11#","SZNS-KJY9F-ACS-12#"]
stat_time=time.time()
stru_time=time.localtime(stat_time)
strf_time=time.strftime("%Y-%m-%d")
foriinrange(0,len(ip)):
child=pexpect.spawn('sshfumy@%s'%ip[i])
fout=open('/root/switch_check/%s.txt'%(name[i][:-1]),'wb+')
child.logfile=fout
ifip[i]=="10.3.240.21":
child.expect("fumy@10.3.240.21'spassword:")
else:
child.expect('password:')
child.sendline("你自己的密码")
child.expect("%s"%name[i])
child.sendline("shenvpower")
child.expect("%s"%name[i])
child.sendline("showprocesscpu|inCPUutilization")
child.expect("%s"%name[i])
child.sendline("shversion|inuptime")
child.expect("%s"%name[i])
child.sendline("showprocessesmemory|inUsed")
child.expect("%s"%name[i])
child.sendline("shenvfan")
child.expect("%s"%name[i])
child.sendline("shlog|inConsolelogging")
child.expect("%s"%name[i])
child.sendline("exit")
time.sleep(3)
file_list=os.listdir("/root/switch_check")
withopen("/root/switch_check/%s"%file_list[0])asf1:
foriinf1:
if"POWER"ini:
power1=i[8:].strip()
if"CPUutilization"ini:
cpu1=i[72:].strip()
if"%suptimeis"%file_list[0][:-4]ini:
uptime1="".join(i[27:].strip().split(","))
if"ProcessorPoolTotal:"ini:
memory1="%.2f%%"%((int(i[38:50].strip())/int(i[21:33].strip()))*100)
if"FANis"ini:
fan1=i[6:].strip()
if"leveldebugging"ini:
log1=i[37:43].strip()
withopen("/root/switch_check/%s"%file_list[1])asf2:
foriinf2:
if"POWER"ini:
power2=i[8:].strip()
if"CPUutilization"ini:
cpu2=i[72:].strip()
if"%suptimeis"%file_list[1][:-4]ini:
uptime2="".join(i[27:].strip().split(","))
if"ProcessorPoolTotal:"ini:
memory2="%.2f%%"%((int(i[38:50].strip())/int(i[21:33].strip()))*100)
if"FANis"ini:
fan2=i[6:].strip()
if"leveldebugging"ini:
log2=i[37:43].strip()
withopen("/root/switch_check/%s"%file_list[2])asf3:
foriinf3:
if"POWER"ini:
power3=i[8:].strip()
if"CPUutilization"ini:
cpu3=i[72:].strip()
if"%suptimeis"%file_list[2][:-4]ini:
uptime3="".join(i[27:].strip().split(","))
if"ProcessorPoolTotal:"ini:
memory3="%.2f%%"%((int(i[38:50].strip())/int(i[21:33].strip()))*100)
if"FANis"ini:
fan3=i[6:].strip()
if"leveldebugging"ini:
log3=i[37:43].strip()
withopen("/root/switch_check/%s"%file_list[3])asf4:
foriinf4:
if"POWER"ini:
power4=i[24:].strip()
if"CPUutilization"ini:
cpu4=i[72:].strip()
if"%suptimeis"%file_list[3][:-4]ini:
uptime4="".join(i[27:].strip().split(","))
if"Total:"ini:
memory4="%.2f%%"%((int(i[21:29].strip())/int(i[6:14].strip()))*100)
if"FANis"ini:
fan4=i[6:].strip()
if"leveldebugging"ini:
log4=i[37:45].strip()
withopen("/root/switch_check/%s"%file_list[4])asf5:
foriinf5:
if"POWER"ini:
power5=i[24:].strip()
if"CPUutilization"ini:
cpu5=i[72:].strip()
if"%suptimeis"%file_list[4][:-4]ini:
uptime5="".join(i[27:].strip().split(","))
if"Total:"ini:
memory5="%.2f%%"%((int(i[21:29].strip())/int(i[6:14].strip()))*100)
if"FANis"ini:
fan5=i[6:].strip()
if"leveldebugging"ini:
log5=i[37:44].strip()
workbook=xlwt.Workbook(encoding='utf-8')
cisco=workbook.add_sheet('深圳网络设备巡检')
style=xlwt.XFStyle()
pattern=xlwt.Pattern()
pattern.pattern=xlwt.Pattern.SOLID_PATTERN
pattern.pattern_fore_colour=xlwt.Style.colour_map['red']
style.pattern=pattern
borders=xlwt.Borders()
borders.left=1
borders.right=1
borders.top=1
borders.bottom=1
style.borders=borders
al=xlwt.Alignment()
al.horz=0x02
al.vert=0x01
style.alignment=al
style1=xlwt.XFStyle()
borders=xlwt.Borders()
borders.left=1
borders.right=1
borders.top=1
borders.bottom=1
style1.borders=borders
al=xlwt.Alignment()
al.horz=0x02
al.vert=0x01
style1.alignment=al
style3=xlwt.XFStyle()
borders=xlwt.Borders()
borders.left=1
borders.right=1
borders.top=1
borders.bottom=1
style3.borders=borders
al=xlwt.Alignment()
al.horz=0x02
al.vert=0x01
style3.alignment=al
first_col=cisco.col(0)
sec_col=cisco.col(1)
thr_col=cisco.col(2)
for_col=cisco.col(3)
first_col.width=200*25
sec_col.width=120*25
thr_col.width=120*25
for_col.width=320*25
cisco.write(0,0,'设备名称',style)
cisco.write(0,1,'管理地址',style)
cisco.write(0,2,'检查项',style)
cisco.write(0,3,'检查结果',style)
cisco.write_merge(1,6,0,0,'%s'%file_list[0][:-4],style3)
cisco.write_merge(1,6,1,1,'%s'%ip[0],style3)
cisco.write(1,2,'电源状态',style1)
cisco.write(2,2,'cpu使用率',style1)
cisco.write(3,2,'运行时间',style1)
cisco.write(4,2,'内存使用率',style1)
cisco.write(5,2,'风扇状态',style1)
cisco.write(6,2,'日志条目',style1)
cisco.write(1,3,power1,style3)
cisco.write(2,3,cpu1,style3)
cisco.write(3,3,uptime1,style3)
cisco.write(4,3,memory1,style3)
cisco.write(5,3,fan1,style3)
cisco.write(6,3,log1,style3)
cisco.write_merge(7,12,0,0,'%s'%file_list[1][:-4],style3)
cisco.write_merge(7,12,1,1,'%s'%ip[1],style3)
cisco.write(7,2,'电源状态',style1)
cisco.write(8,2,'cpu使用率',style1)
cisco.write(9,2,'运行时间',style1)
cisco.write(10,2,'内存使用率',style1)
cisco.write(11,2,'风扇状态',style1)
cisco.write(12,2,'日志条目',style1)
cisco.write(7,3,power2,style3)
cisco.write(8,3,cpu2,style3)
cisco.write(9,3,uptime2,style3)
cisco.write(10,3,memory2,style3)
cisco.write(11,3,fan2,style3)
cisco.write(12,3,log2,style3)
cisco.write_merge(13,18,0,0,'%s'%file_list[2][:-4],style3)
cisco.write_merge(13,18,1,1,'%s'%ip[2],style3)
cisco.write(13,2,'电源状态',style1)
cisco.write(14,2,'cpu使用率',style1)
cisco.write(15,2,'运行时间',style1)
cisco.write(16,2,'内存使用率',style1)
cisco.write(17,2,'风扇状态',style1)
cisco.write(18,2,'日志条目',style1)
cisco.write(13,3,power3,style3)
cisco.write(14,3,cpu3,style3)
cisco.write(15,3,uptime3,style3)
cisco.write(16,3,memory3,style3)
cisco.write(17,3,fan3,style3)
cisco.write(18,3,log3,style3)
cisco.write_merge(19,24,0,0,'%s'%file_list[3][:-4],style3)
cisco.write_merge(19,24,1,1,'%s'%ip[3],style3)
cisco.write(19,2,'电源状态',style1)
cisco.write(20,2,'cpu使用率',style1)
cisco.write(21,2,'运行时间',style1)
cisco.write(22,2,'内存使用率',style1)
cisco.write(23,2,'风扇状态',style1)
cisco.write(24,2,'日志条目',style1)
cisco.write(19,3,power4,style3)
cisco.write(20,3,cpu4,style3)
cisco.write(21,3,uptime4,style3)
cisco.write(22,3,memory4,style3)
cisco.write(23,3,fan4,style3)
cisco.write(24,3,log4,style3)
cisco.write_merge(25,30,0,0,'%s'%file_list[4][:-4],style3)
cisco.write_merge(25,30,1,1,'%s'%ip[4],style3)
cisco.write(25,2,'电源状态',style1)
cisco.write(26,2,'cpu使用率',style1)
cisco.write(27,2,'运行时间',style1)
cisco.write(28,2,'内存使用率',style1)
cisco.write(29,2,'风扇状态',style1)
cisco.write(30,2,'日志条目',style1)
cisco.write(25,3,power5,style3)
cisco.write(26,3,cpu5,style3)
cisco.write(27,3,uptime5,style3)
cisco.write(28,3,memory5,style3)
cisco.write(29,3,fan5,style3)
cisco.write(30,3,log5,style3)
workbook.save('SZ_NDC_%s.xls'%strf_time)
os.system("mail-a/root/python/SZ_NDC_%s.xls-scheck_test你的邮箱< /root/python/mail.txt "%strf_time)
os.system("find/root/python/-typef-mtime+15-name'SZ_NDC_*'|xargs
m-f")
cisco_check()
mail.txt中的内容即邮件内容:
各位好:
巡检结果详情请看附件。
ps:本邮件由系统自动发送,如有任何问题请联系***
BestWishes
邮件配置
/etc/mail.rc
setfrom=邮箱地址smtp=邮箱服务器smtp-auth-user=邮箱用户名smtp-auth-password=密码smtp-auth=login
定时任务
crontab-e
0017**5/usr/bin/python3/root/python/switch_check.py>/dev/null2>&1#每周五下午5点巡检
最终效果

审核编辑 :李倩
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
自动化
+关注
关注
30文章
5888浏览量
89282 -
python
+关注
关注
57文章
4858浏览量
89598 -
脚本
+关注
关注
1文章
407浏览量
29054
原文标题:如何使用Python对交换机进行自动化巡检?聪明的网工已经收藏了!
文章出处:【微信号:网络技术干货圈,微信公众号:网络技术干货圈】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
热点推荐
工业交换机到底是什么?为什么工业环境非他不可?
在工业自动化、智能交通、能源电力等关键领域,网络中断带来的损失可能是灾难性的。正是这种对可靠性的极致追求,催生了与普通商用交换机截然不同的产品——工业交换机。 工业交换机*多口多型
工业以太网交换机与商用交换机的技术差异与应用场景分析
在当今的工业自动化和网络通信领域,交换机作为网络基础设施的核心组件,扮演着至关重要的角色。然而,市场上存在两种主要类型的交换机:工业交换机和普通交换
PON交换机一体化高效生产测试方案
(HunterATE)
Hunter ATE是全新的BS架构自动化测试平台,采用可视化配置,并搭配python脚本进行测试软件开发,降低了软件开发的难度,具有丰富的仪器库的支持,
可
发表于 08-26 11:05
产线自动化、电力监控…都离不开靠谱的工业交换机!
在现代工业自动化和电力监控系统中,工业交换机扮演着至关重要的角色。无论是高速运转的生产线还是复杂的电力监控网络,都需要一个稳定可靠的通信基础。本文将深入探讨工业交换机在这些领域的应用及其重要性
Is交换机组成的环形网络中,当位于主控节点的Ism网管交换机故障后,为什么环网中其他交换机不受影响?
当位于主控节点的交换机故障断掉,环网中其他交换机是如何保持正常运行的?或者说什么原理让环网其他交换机不受影响?
发表于 08-06 06:46
一字之差,背后是系统稳定性的巨大差距:工业交换机 vs 企业交换机
工业级交换机和企业级交换机虽仅一字之差,但在应用场景、硬件结构、稳定性设计等方面却大相径庭。本文以工程师视角深入解析两者的技术差异,并以光路科技FR-TSN系列为例,探讨其在工业自动化领域中的关键作用,帮助读者选对真正适合的
工业通信大集结:TSN、PROFINET、EtherCAT交换机集中发布,光路科技展示核心产品
工博会现场集中展示了多款来自Fiberroad的面向工业自动化与智能制造应用的以太网交换机产品,涵盖TSN交换机、PROFINET交换机、EtherCAT
工厂自动化应用方案:摩莎MOXA EDS-510E千兆交换机光模块解决方案
为确保光模块的兼容性,易天光通信又引进一款EDS-510E千兆以太网交换机,它是专为严苛的关键任务应用而设计的,例如工厂自动化,ITS及过程控制。该交换机配备3个千兆以太网口,拥有极强的灵活度来建造一个千兆冗余环网及一个千兆上行
工业级交换机选型指南
在工业自动化和物联网应用中,工业级交换机是不可或缺的网络设备。它不仅需要具备高度的稳定性和可靠性,还需要适应各种恶劣的环境条件。但对于初次接触工业级交换机的用户来说,选型可能会显得有些复杂。本文将为
工业交换机究竟有何用
在工业自动化和物联网技术快速发展的今天,工业交换机作为网络通信的核心设备,已成为工业互联网基础设施中不可或缺的一部分。与普通商用交换机相比,工业交换机凭借其高可靠性、强抗干扰能力和宽温
主交换机和分交换机的连接光纤接口是否是lc
等。具体选择哪种接口,通常需要根据以下因素进行考虑: 设备兼容性:不同品牌和型号的交换机可能支持不同的光纤接口类型。因此,在选择接口时,需要确保主交换机和分交换机之间的接口类型兼容。
POE交换机接口详解
PoE交换机可轻松实现大规模无线覆盖。
智能楼宇与物联网设备
在智能楼宇中,PoE交换机广泛应用于门禁系统、智能照明和传感器设备,有助于实现楼宇自动化与能效优化。如智能照明系统使用PoE供电,能够
发表于 03-27 17:17
如何实现POE交换机串联?
,无需额外电源线。
智能家居或楼宇自动化
:将POE交换机串联,连接多个智能设备,实现数据与供电一体化。
POE交换机串联的原理与优势
在串联模式下,一台POE
发表于 03-25 19:10
PoE交换机与非PoE交换机的比较:两者能否协同工作?
。PoE交换机很好地解决了这一问题,并且可以无缝融入现有网络基础设施,而无需进行大规模改造。
但这也引发了一个常见问题:PoE端口可以连接非PoE设备吗? 这正是我们接下来要探讨的内容!
PoE交换机
发表于 03-21 19:20
交换机与集线器的优缺点 如何监控交换机流量
提供独立的带宽,确保数据传输的准确性和效率。这意味着即使多个设备同时传输数据,也不会相互影响。 智能转发 :交换机根据MAC地址进行数据交换,只将信号发送到对应的端口,减少了不必要的广播和冲突。 扩展性强 :交换机通常具有更

如何使用Python对交换机进行自动化巡检?
评论