折腾了一天的装饰器,貌似理解了其中的一点点...

#!/usr/bin/envpython3#coding=utf-8importgetpassfromnetmikoimportConnectHandlerfromnetmiko.ssh_exceptionimportNetMikoTimeoutException,NetMikoAuthenticationExceptiondefauth(Conn):defwrapper(ip,username,password):device={'device_type':'cisco_ios','ip':ip,'username':username,'password':password,}try:connect=ConnectHandler(**device)connect.enable()except(EOFError,NetMikoTimeoutException):print(u"网络设备%s:无法连接!请确认该设备IPAddress是否可达!"%ip)returnexcept(EOFError,NetMikoAuthenticationException):print(u"网络设备%s:用户名与密码错误!请确认账号与密码!"%ip)returnConn(ip,username,password,connect)returnConnreturnwrapper@authdefshowInterface(ip,username,password,connect):res=connect.send_command('showipintbrief')print(res)connect.disconnect()@authdefshowVersion(ip,username,password,connect):res=connect.send_command('showversion')print(res)connect.disconnect()defmain():print(u"选项请输入数字,如:1、2")print(u"1.查询设备接口信息")print(u"2.查询设备版本信息")print("")runFunc=int(input(u'请输入需要执行命令的选项:'))input_ip=input("IPAddress:")ipaddress=input_ip.split(",")username=input("Username:")password=getpass.getpass()foripinipaddress:ifrunFunc==1:showInterface(ip,username,password)ifrunFunc==2:showVersion(ip,username,password)if__name__=='__main__':main()

运执行上面的代码,运行效果如下: 


以下代码用类也可以实现相一样的结果,可以对比一下那个方便

#!/usr/bin/envpython3#coding=utf-8importgetpassfromnetmikoimportConnectHandlerfromnetmiko.ssh_exceptionimportNetMikoTimeoutException,NetMikoAuthenticationExceptionclassNWBackup():def__init__(self):self.ip=input('IPAddress:')self.username=input('Username:')self.password=getpass.getpass()self.device={'device_type':'cisco_ios','username':self.username,'password':self.password,'ip':self.ip}try:self.connect=ConnectHandler(**self.device)self.connect.enable()except(EOFError,NetMikoTimeoutException):print(u"网络设备%s:无法连接!请确认该设备IPAddress是否可达!"%self.ip)returnexcept(EOFError,NetMikoAuthenticationException):sprint(u"网络设备%s:用户名与密码错误!请确认账号与密码!"%self.ip)returndefdisVersion(self):cmd='showversion'print(self.connect.send_command(cmd))self.connect.disconnect()defdisInterface(self):cmd='showipinterfacebrief'print(self.connect.send_command(cmd))self.connect.disconnect()defrunComment(self):disfunc=int(input('plsinputnum:'))ifdisfunc==1:self.disVersion()ifdisfunc==2:self.disInterface()if__name__=='__main__':run=NWBackup()run.runComment()