python 处理telnet返回的More,以及get想要的那个参数方法


Posted in Python onFebruary 14, 2019

问题:

需要循环获取网元返回的某个参数,并计算出平均值。

解决方案:

通过expect解决返回More的问题。

通过具体的参数位置,精确获取到参数。

讨论:

参数位置固定,不好复用。

#! usr/bin/env python

# -*- coding: utf-8 -*-

import telnetlib
import math
import time

def get_param(b):
 "获取相应的参数,返回float型参数组"
 c = []
 b = list(b)
 length = len(b)
 print length
 for x in b:
 c.append(float(x))
 print c
 return c

def get_avg(a):
 "获取平均值"
 length = len(a)
 sum = 0
 for x in a:
 sum += x
 avg = sum/length
 return avg

def get_telnet(tn):
 "获取telnet数据"
 for command in commands: 
 tn.write('%s\n' % command)
 time.sleep(0.5)
## result = tn.read_very_eager() # 不用read_all(),不能处理More
 print "**************"
 a = []
 a.append('More')
 print a
 result = str()
 while True:
  b,c,d = tn.expect(a,timeout=1)
  print b # 有More为0,无More为-1
  print 'cccccccccccccccccccccccccccccccccccccccccccc'
  print c
  print 'dddddddddddddddddddddddddddddddddddddddddddd'
  print d
  result += d
  if 0 == b:
  print "There has 'More'!!!"
  tn.write(r' ') #不用\r\n来继续
  else:
  break
 print 'get result success!'
 print result #获取到带More的所有返回结果 
 a = result.split('\r\n') # 不要加r
 length = len(a)
 print length
 b = a[1].split(' ')
 print b
 print a[32]
 c = a[32]
 d = c.split(' ')
 print d
 length = len(d)
 print d[8]
 e = d[8].split('(')
 print e[0]
 return e[0] 

def close_telnet(tn):
 "执行完毕后,终止Telnet连接(或输入exit退出)"
 tn.write('exit\n')
 tn.close()
 
def open_telnet(Host, username, password, finish, commands): 
 "Telnet远程登录"
 # 连接Telnet服务器 
 tn = telnetlib.Telnet(Host, port=23, timeout=10) 
 tn.set_debuglevel(2)
 # 输入登录用户名 
 tn.read_until('Username:') 
 tn.write(username + '\n') 
 # 输入登录密码 
 tn.read_until('Password:') 
 tn.write(password + '\n')

 # 登录完毕后执行命令 
 tn.read_until(finish) 
 return tn
 
if __name__=='__main__': 
 Host = '' # Telnet服务器IP 
 username = '' # 登录用户名 
 password = '' # 登录密码 
 finish = '#' # 命令提示符
 param = []

 commands = ['sho optical-module-info xgei-1/3/1']
 tn = open_telnet(Host, username, password, finish, commands)
 for i in range(1,10):
 param.append(get_telnet(tn))
 close_telnet(tn)
 print param
 print get_avg(get_param(param))
 


'''

运行结果:

37
['Optical', 'Module', 'Position', ':', 'xgei-1/3/1']
Bias-Upper : 131(mA)  Bias-Lower : 0(mA)
['Bias-Upper', '', '', '', '', '', '', ':', '131(mA)', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'Bias-Lower', '', '', '', '', '', '', ':', '0(mA)']
131(mA)
131
Telnet(172.10.1.123,23): send 'exit\n'
['131', '131', '131', '131', '131', '131', '131', '131', '131']
9
[131.0, 131.0, 131.0, 131.0, 131.0, 131.0, 131.0, 131.0, 131.0]
131.0
>>> 
'''

以上这篇python 处理telnet返回的More,以及get想要的那个参数方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python高并发异步服务器核心库forkcore使用方法
Nov 26 Python
详解Python中的Descriptor描述符类
Jun 14 Python
Python检测生僻字的实现方法
Oct 23 Python
python docx 中文字体设置的操作方法
May 08 Python
python多进程提取处理大量文本的关键词方法
Jun 05 Python
树莓派采用socket方式文件传输(python)
Jun 22 Python
Python调用C语言的实现
Jul 26 Python
Python中six模块基础用法
Dec 08 Python
python3连接mysql获取ansible动态inventory脚本
Jan 19 Python
python使用html2text库实现从HTML转markdown的方法详解
Feb 21 Python
如何让python的运行速度得到提升
Jul 08 Python
Python下划线5种含义代码实例解析
Jul 10 Python
python 多个参数不为空校验方法
Feb 14 #Python
python pexpect ssh 远程登录服务器的方法
Feb 14 #Python
Python之时间和日期使用小结
Feb 14 #Python
对Python Pexpect 模块的使用说明详解
Feb 14 #Python
python获取交互式ssh shell的方法
Feb 14 #Python
对python多线程SSH登录并发脚本详解
Feb 14 #Python
Python Selenium 之关闭窗口close与quit的方法
Feb 13 #Python
You might like
php如何调用webservice应用介绍
2012/11/24 PHP
PHP远程采集图片详细教程
2014/07/01 PHP
ajax+php控制所有后台函数调用
2015/07/15 PHP
Yii框架弹出窗口组件CJuiDialog用法分析
2017/01/07 PHP
Laravel下生成验证码的类
2017/11/15 PHP
收藏一些不常用,但是有用的代码
2007/03/12 Javascript
jquery checkbox实现单选小例
2013/11/27 Javascript
JavaScript基础函数整理汇总
2015/01/30 Javascript
有效提高JavaScript执行效率的几点知识
2015/01/31 Javascript
JS使用parseInt解析数字实现求和的方法
2015/08/05 Javascript
JS实现可自定义大小,可双击关闭的弹出层效果
2015/10/16 Javascript
javascript学习笔记整理(概述、变量、数据类型简介)
2015/10/25 Javascript
原生js三级联动的简单实现代码
2016/06/07 Javascript
深入理解AngularJS中的ng-bind-html指令和$sce服务
2016/09/08 Javascript
NodeJS实现客户端js加密
2017/01/09 NodeJs
vuejs使用$emit和$on进行组件之间的传值的示例
2017/10/04 Javascript
Vuejs 实现简易 todoList 功能 与 组件实例代码
2018/09/10 Javascript
webpack3里使用uglifyjs压缩js时打包报错的解决
2018/12/13 Javascript
vue单页面在微信下只能分享落地页的解决方案
2019/04/15 Javascript
layui清除radio的选中状态实例
2019/11/14 Javascript
原生JS实现京东查看商品点击放大
2020/12/21 Javascript
[02:45]DOTA2英雄敌法师基础教程
2013/11/25 DOTA
Python常用的日期时间处理方法示例
2015/02/08 Python
Python中字典的基本知识初步介绍
2015/05/21 Python
python快速建立超简单的web服务器的实现方法
2018/02/17 Python
python 实现控制鼠标键盘
2020/11/27 Python
详解CSS3媒体查询响应式布局bootstrap 框架原理实战(推荐)
2020/11/16 HTML / CSS
HTML5超炫酷粒子效果的进度条的实现示例
2019/08/23 HTML / CSS
Amara美国站:英国高端家居礼品网站,世界各地的奢侈家具品牌
2017/07/26 全球购物
大学生简历中个人的自我评价
2013/10/06 职场文书
培训演讲稿范文
2014/01/12 职场文书
迅雷Cued工作心得体会
2014/01/27 职场文书
处级领导干部四风问题自我剖析材料
2014/09/29 职场文书
财产分割协议书
2016/03/22 职场文书
navicat 连接Ubuntu虚拟机的mysql的操作方法
2022/04/02 MySQL
Consul在linux环境的集群部署
2022/04/08 Servers