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 除法小技巧
Sep 06 Python
python简单猜数游戏实例
Jul 09 Python
在arcgis使用python脚本进行字段计算时是如何解决中文问题的
Oct 18 Python
Python中的TCP socket写法示例
May 11 Python
python修改txt文件中的某一项方法
Dec 29 Python
python ipset管理 增删白名单的方法
Jan 14 Python
简单易懂Pytorch实战实例VGG深度网络
Aug 27 Python
Python爬虫使用代理IP的实现
Oct 27 Python
完美解决keras保存好的model不能成功加载问题
Jun 11 Python
matplotlib设置颜色、标记、线条,让你的图像更加丰富(推荐)
Sep 25 Python
python进行二次方程式计算的实例讲解
Dec 06 Python
Python机器学习之逻辑回归
May 11 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 获取客户端的真实ip
2009/11/30 PHP
php csv操作类代码
2009/12/14 PHP
上传文件先创建目录 再上传到目录里面去
2010/12/29 PHP
如何在symfony中导出为CSV文件中的数据
2011/10/06 PHP
laravel 配置路由 api和web定义的路由的区别详解
2019/09/03 PHP
让广告代码不再影响你的网页加载速度
2006/07/07 Javascript
如何快速的呈现我们的网页的技巧整理
2007/07/01 Javascript
关于图片按比例自适应缩放的js代码
2011/10/30 Javascript
js实现简单随机抽奖的方法
2015/01/27 Javascript
JS+CSS实现自动改变切换方向图片幻灯切换效果的方法
2015/03/02 Javascript
JavaScript实现数组随机排序的方法
2015/06/26 Javascript
微信小程序模板之分页滑动栏
2017/02/10 Javascript
vue二级路由设置方法
2018/02/09 Javascript
Vue中多个元素、组件的过渡及列表过渡的方法示例
2019/02/13 Javascript
react项目从新建到部署的实现示例
2021/02/19 Javascript
web.py中调用文件夹内模板的方法
2014/08/26 Python
Python 实现简单的shell sed替换功能(实例讲解)
2017/09/29 Python
python获取全国城市pm2.5、臭氧等空气质量过程解析
2019/10/12 Python
python opencv 图像边框(填充)添加及图像混合的实现方法(末尾实现类似幻灯片渐变的效果)
2020/03/09 Python
python3检查字典传入函数键是否齐全的实例
2020/06/05 Python
matplotlib部件之矩形选区(RectangleSelector)的实现
2021/02/01 Python
数据库什么时候应该被重组
2012/11/02 面试题
党员个人思想汇报
2013/12/28 职场文书
天鹅的故事教学反思
2014/02/04 职场文书
十佳护士先进事迹
2014/05/08 职场文书
环境保护标语
2014/06/20 职场文书
幼儿园保育员责任书
2014/07/22 职场文书
我们的节日中秋活动方案
2014/08/19 职场文书
公务员培的训心得体会
2014/09/01 职场文书
党的群众路线教育实践活动心得体会(教师)
2014/10/31 职场文书
教师群众路线教育实践活动学习笔记
2014/11/05 职场文书
三八节活动主持词
2015/07/04 职场文书
不知如何爱孩子,这些方法教会您
2019/08/06 职场文书
导游词之白茶谷九龙峡
2019/10/23 职场文书
python爬虫请求库httpx和parsel解析库的使用测评
2021/05/10 Python
Redis做数据持久化的解决方案及底层原理
2021/07/15 Redis