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 isinstance判断对象类型
Sep 06 Python
python实现的登陆Discuz!论坛通用代码分享
Jul 11 Python
Python中的__new__与__init__魔术方法理解笔记
Nov 08 Python
Python cookbook(数据结构与算法)找出序列中出现次数最多的元素算法示例
Mar 15 Python
tensorflow 1.0用CNN进行图像分类
Apr 15 Python
详解Python中的四种队列
May 21 Python
在PyCharm中批量查找及替换的方法
Jan 20 Python
Python 从subprocess运行的子进程中实时获取输出的例子
Aug 14 Python
python实现WebSocket服务端过程解析
Oct 18 Python
在Ubuntu 20.04中安装Pycharm 2020.1的图文教程
Apr 30 Python
python 如何快速复制序列
Sep 07 Python
Python爬虫基础之初次使用scrapy爬虫实例
Jun 26 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 crc32()函数讲解
2019/02/14 PHP
PHP pthreads v3下worker和pool的使用方法示例
2020/02/21 PHP
利用jQuery插件扩展识别浏览器内核与外壳的类型和版本的实现代码
2011/10/22 Javascript
jquery监听div内容的变化具体实现思路
2013/11/04 Javascript
一个JavaScript函数把URL参数解析成Json对象
2014/09/24 Javascript
jQuery的几个我们必须了解的特点
2015/05/03 Javascript
Java Mybatis框架入门基础教程
2015/09/21 Javascript
jQuery仿写百度百科的目录树
2017/01/03 Javascript
Ajax异步获取html数据中包含js方法无效的解决方法
2017/02/20 Javascript
vue.js内部自定义指令与全局自定义指令的实现详解(利用directive)
2017/07/11 Javascript
Angular中响应式表单的三种更新值方法详析
2017/08/22 Javascript
原生js的ajax和解决跨域的jsonp(实例讲解)
2017/10/16 Javascript
JavaScript数据结构之单链表和循环链表
2017/11/28 Javascript
Vue 框架之键盘事件、健值修饰符、双向数据绑定
2018/11/14 Javascript
bootstrap table插件动态加载表头
2019/07/19 Javascript
layui table设置某一行的字体颜色方法
2019/09/05 Javascript
layui异步加载table表中某一列数据的例子
2019/09/16 Javascript
ES6 Promise对象概念及用法实例详解
2019/10/15 Javascript
[01:31:02]TNC vs VG 2019国际邀请赛淘汰赛 胜者组赛BO3 第一场
2019/08/22 DOTA
python函数返回多个值的示例方法
2013/12/04 Python
python django生成迁移文件的实例
2019/08/31 Python
Python实现区域填充的示例代码
2021/02/03 Python
解决Pyinstaller打包软件失败的一个坑
2021/03/04 Python
玩转CSS3色彩
2010/01/16 HTML / CSS
CSS3 二级导航菜单的制作的示例
2018/04/02 HTML / CSS
大学生找工作推荐信范文
2013/11/28 职场文书
岗位聘任书范文
2014/03/29 职场文书
新学期标语
2014/06/30 职场文书
缅怀先烈演讲稿
2014/09/03 职场文书
2015年家长学校工作总结
2015/04/22 职场文书
学校食堂管理制度
2015/08/04 职场文书
交通安全教育主题班会
2015/08/12 职场文书
六年级数学教学反思
2016/02/16 职场文书
golang 实现对Map进行键值自定义排序
2021/04/28 Golang
php实例化对象的实例方法
2021/11/17 PHP
三星 3nm 芯片将于第二季度开始量产
2022/04/29 数码科技