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集合类型用法分析
Apr 08 Python
pygame学习笔记(6):完成一个简单的游戏
Apr 15 Python
python生成验证码图片代码分享
Jan 28 Python
Python的Django REST框架中的序列化及请求和返回
Apr 11 Python
Python动态导入模块的方法实例分析
Jun 28 Python
Python使用random.shuffle()打乱列表顺序的方法
Nov 08 Python
Python学习笔记之抓取某只基金历史净值数据实战案例
Jun 03 Python
运行tensorflow python程序,限制对GPU和CPU的占用操作
Feb 06 Python
PyCharm取消波浪线、下划线和中划线的实现
Mar 03 Python
Django Model层F,Q对象和聚合函数原理解析
Nov 12 Python
解决PyCharm无法使用lxml库的问题(图解)
Dec 22 Python
使用python创建股票的时间序列可视化分析
Mar 03 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
Content-type 的说明
2006/10/09 PHP
php的SimpleXML方法读写XML接口文件实例解析
2014/06/16 PHP
ThinkPHP3.1新特性之查询条件预处理简介
2014/06/19 PHP
PHP实现的简单日历类
2014/11/29 PHP
yii2 url重写并隐藏index.php方法
2018/12/10 PHP
php如何比较两个浮点数是否相等详解
2019/02/12 PHP
js页面跳转常用的几种方式
2010/11/25 Javascript
关于setInterval、setTimeout在jQuery中的使用注意事项
2011/09/28 Javascript
由浅入深剖析Angular表单验证
2016/07/14 Javascript
NodeJS和BootStrap分页效果的实现代码
2016/11/07 NodeJs
bootstrap动态添加面包屑(breadcrumb)及其响应事件的方法
2017/05/25 Javascript
基于node.js的fs核心模块读写文件操作(实例讲解)
2017/09/10 Javascript
详解Vue2 添加对scss的支持
2019/01/02 Javascript
Weex开发之地图篇的具体使用
2019/10/16 Javascript
javaScript中indexOf用法技巧
2019/11/26 Javascript
微信小程序开发数据缓存基础知识辨析及运用实例详解
2020/11/06 Javascript
[03:43]2014DOTA2西雅图国际邀请赛 newbee战队巡礼
2014/07/07 DOTA
[03:13]DOTA2-DPC中国联赛1月25日Recap集锦
2021/03/11 DOTA
windows下python安装paramiko模块和pycrypto模块(简单三步)
2017/07/06 Python
基于Python列表解析(列表推导式)
2018/06/23 Python
python存储16bit和32bit图像的实例
2018/12/05 Python
Pycharm新建模板默认添加个人信息的实例
2019/07/15 Python
Python中的 ansible 动态Inventory 脚本
2020/01/19 Python
一款纯css3实现的动画加载导航
2014/10/08 HTML / CSS
记一次高分屏下canvas模糊问题
2020/02/17 HTML / CSS
AmazeUI 评论列表的实现示例
2020/08/13 HTML / CSS
大一学生假期实习的自我评价
2013/10/12 职场文书
建筑专业自我鉴定
2013/10/22 职场文书
销售副总经理岗位职责
2013/12/11 职场文书
我为党旗添光彩演讲稿
2014/09/13 职场文书
2014副局长群众路线对照检查材料思想汇报
2014/09/22 职场文书
苏州园林导游词
2015/02/03 职场文书
党校个人总结
2015/03/04 职场文书
城南旧事电影观后感
2015/06/16 职场文书
三八妇女节新闻稿
2015/07/17 职场文书
Python 数据可视化之Bokeh详解
2021/11/02 Python