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

#!/usr/bin/env python3
#coding=utf-8
import getpass
from netmiko import ConnectHandler
from netmiko.ssh_exception import NetMikoTimeoutException,NetMikoAuthenticationExceptiondef auth(Conn):def wrapper(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)    return Connreturn wrapper@auth
def showInterface(ip,username,password,connect):res = connect.send_command('show ip int brief')print(res)connect.disconnect()@auth
def showVersion(ip,username,password,connect):res = connect.send_command('show version')print(res)connect.disconnect()def main():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()for ip in ipaddress:if runFunc == 1:    showInterface(ip,username,password)if runFunc == 2:showVersion(ip,username,password)if __name__ == '__main__':main()

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

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

#!/usr/bin/env python3
#coding=utf-8
import getpass
from netmiko import ConnectHandler
from netmiko.ssh_exception import NetMikoTimeoutException,NetMikoAuthenticationExceptionclass NWBackup():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)returndef disVersion(self):cmd = 'show version'print(self.connect.send_command(cmd))self.connect.disconnect()def disInterface(self):cmd = 'show ip interface brief'print(self.connect.send_command(cmd))self.connect.disconnect()def runComment(self):disfunc = int(input('pls input num: '))if disfunc == 1:self.disVersion()if disfunc == 2:self.disInterface()if __name__ == '__main__':run = NWBackup()run.runComment()

转载于:https://blog.51cto.com/arckyli/2362655

Python: 装饰器的小例子相关推荐

  1. python装饰设备_Python: 装饰器的小例子

    折腾了一天的装饰器,貌似理解了其中的一点点...#!/usr/bin/env python3 #coding=utf-8 import getpass from netmiko import Conn ...

  2. python装饰器实例-Python装饰器实用例子

    Python里我们经常能见到@开头的句法,也就是人们常说的装饰器(decorator).装饰器是Python非常重要的一部分,能够产出更易于维护的代码.这篇文章会给大家带来装饰器的介绍以及几个实用的例 ...

  3. python装饰器实例-python装饰器实例大详解

    原标题:python装饰器实例大详解 一.作用域 在python中,作用域分为两种:全局作用域和局部作用域. 全局作用域是定义在文件级别的变量,函数名.而局部作用域,则是定义函数内部. 关于作用域,我 ...

  4. python装饰器-python装饰器简介---这一篇也许就够了(推荐)

    Python装饰器(decorator)是在程序开发中经常使用到的功能,合理使用装饰器,能让我们的程序如虎添翼. 装饰器引入 初期及问题诞生 假如现在在一个公司,有A B C三个业务部门,还有S一个基 ...

  5. python装饰器原理-Python装饰器完全解读

    1 引言 装饰器(Decorators)可能是Python中最难掌握的概念之一了,也是最具Pythonic特色的技巧,深入理解并应用装饰器,你会更加感慨--人生苦短,我用Python. 2 初步理解装 ...

  6. python装饰器原理-python装饰器原理与用法深入详解

    本文实例讲述了python装饰器原理与用法.分享给大家供大家参考,具体如下: 你会Python嘛? 我会! 那你给我讲下Python装饰器吧! Python装饰器啊?我没用过哎 以上是我一个哥们面试时 ...

  7. python装饰器实例-python装饰器使用实例详解

    这篇文章主要介绍了python装饰器使用实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 python装饰器的作用就是在不想改变原函数代码的情 ...

  8. 没看完这11 条,别说你精通 Python 装饰器

    对于每一个学习 Python 的同学,想必对 @ 符号一定不陌生了,正如你所知, @ 符号是装饰器的语法糖,@符号后面的函数就是我们本文的主角:装饰器. 装饰器放在一个函数开始定义的地方,它就像一顶帽 ...

  9. 这是我见过最全面的Python装饰器详解!没有学不会这种说法

    python装饰器 刚刚接触python的装饰器,简直懵逼了,直接不懂什么意思啊有木有,自己都忘了走了多少遍Debug,查了多少遍资料,才有点点开始明白了. 学习python中有什么不懂的地方,小编这 ...

最新文章

  1. CUDA Samples: Long Vector Add
  2. .Net开发时有没有好的页面开发框架?
  3. Centos7.0一键搭建Python3.6开发环境
  4. GO 跟C++/C差异
  5. 【行为型模式】《大话设计模式》——读后感 (10)无尽加班何时休?——状态模式...
  6. 你该认识这样的Linux_shell函数使用案例
  7. java_Socket简单使用方法
  8. 27 JSX函数子元素的应用与思考
  9. java 解析日期格式_日期/时间格式/解析,Java 8样式
  10. genymotion 极速模拟器
  11. PHP5.4连接sqlserver
  12. aix查看oracle进程内存,Aix 查看进程占用内存大小(按从大小排列)
  13. Microsoft Visual C++ 2005 SP1无法安装
  14. 我对Backbone的认识
  15. 使用css控制gridview控件的样式,GridView 样式美化及应用.doc
  16. Odin - Inspector and Serializer 学习笔记总结
  17. C# XmlHelper
  18. i9023 中国联通 3G 西安信息中心号码
  19. 随机数模拟抛硬币实验
  20. php 自动抢红包机制,用脚本实现自动抢红包

热门文章

  1. 卡通自适应网址发布页源码
  2. 帝云CMS内容管理系统DiYunCMS v4.3.12
  3. mysql连接代码_MySQL 表连接
  4. dhcp是哪一层的协议_随手记(3)常见的网络协议有哪些
  5. js 网页嵌套在div的方法
  6. 前端开发知识点解答-JavaScript-面试
  7. 苹果cms V10模板 首涂黑白风格窄屏超小模板
  8. select scope_identity()
  9. 视差滚动教程、实现方法、源代码
  10. Linux:mysqldump 用法 数据库导出