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库urllib与urllib2主要区别分析
Jul 13 Python
python实现可视化动态CPU性能监控
Jun 21 Python
面向初学者的Python编辑器Mu
Oct 08 Python
对python创建及引用动态变量名的示例讲解
Nov 10 Python
Python功能点实现:函数级/代码块级计时器
Jan 02 Python
Python面向对象中类(class)的简单理解与用法分析
Feb 21 Python
vscode+PyQt5安装详解步骤
Aug 12 Python
Pycharm2020最新激活码|永久激活(附最新激活码和插件的详细教程)
Sep 29 Python
用Python实现一个打字速度测试工具来测试你的手速
May 28 Python
C站最全Python标准库总结,你想要的都在这里
Jul 03 Python
python运算符之与用户交互
Apr 13 Python
LyScript实现绕过反调试保护的示例详解
Aug 14 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
layui数据表格自定义每页条数limit设置
2019/10/26 PHP
取键盘键位ASCII码的网页
2007/07/30 Javascript
Extjs学习笔记之七 布局
2010/01/08 Javascript
始终在屏幕中间显示Div的代码(css+js)
2011/03/10 Javascript
jquery简单实现滚动条下拉DIV固定在头部不动
2013/11/25 Javascript
js QQ客服悬浮效果实现代码
2014/12/12 Javascript
jQuery自动添加表单项的方法
2015/07/13 Javascript
简单理解JavaScript中的封装与继承特性
2016/03/19 Javascript
Bootstrap基本插件学习笔记之模态对话框(16)
2016/12/08 Javascript
js正则表达式验证表单【完整版】
2017/03/06 Javascript
微信小程序学习笔记之获取位置信息操作图文详解
2019/03/29 Javascript
js canvas实现5张图片合成一张图片
2019/07/15 Javascript
python使用cookie库操保存cookie详解
2014/03/03 Python
Python中函数的参数传递与可变长参数介绍
2015/06/30 Python
RC4文件加密的python实现方法
2015/06/30 Python
详解在Python的Django框架中创建模板库的方法
2015/07/20 Python
Python while 循环使用的简单实例
2016/06/08 Python
python添加模块搜索路径方法
2017/09/11 Python
基于python中staticmethod和classmethod的区别(详解)
2017/10/24 Python
pytorch cnn 识别手写的字实现自建图片数据
2018/05/20 Python
python redis 批量设置过期key过程解析
2019/11/26 Python
pytorch 实现在一个优化器中设置多个网络参数的例子
2020/02/20 Python
Python基于smtplib模块发送邮件代码实例
2020/05/29 Python
详解Django关于StreamingHttpResponse与FileResponse文件下载的最优方法
2021/01/07 Python
手工制作的音乐盒:Music Box Attic
2019/09/05 全球购物
Ego Shoes官网:英国时髦鞋类品牌
2020/10/19 全球购物
卫生安全检查制度
2014/02/04 职场文书
财务情况说明书范文
2014/05/06 职场文书
考试没考好检讨书(精选篇)
2014/11/16 职场文书
自荐信格式模板
2015/03/27 职场文书
欢送会主持词
2015/07/01 职场文书
小学生法制教育心得体会
2016/01/14 职场文书
2016年社区综治宣传月活动总结
2016/03/16 职场文书
python函数指定默认值的实例讲解
2021/03/29 Python
Pytorch反向传播中的细节-计算梯度时的默认累加操作
2021/06/05 Python
Python中npy和mat文件的保存与读取
2022/04/24 Python