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 相关文章推荐
详解如何用OpenCV + Python 实现人脸识别
Oct 20 Python
Django使用Celery异步任务队列的使用
Mar 13 Python
python Pandas 读取txt表格的实例
Apr 29 Python
python 获取页面表格数据存放到csv中的方法
Dec 26 Python
python实现微信防撤回神器
Apr 29 Python
python使用pygame模块实现坦克大战游戏
Mar 25 Python
python如何获取列表中每个元素的下标位置
Jul 01 Python
Python 如何提高元组的可读性
Aug 26 Python
pytorch .detach() .detach_() 和 .data用于切断反向传播的实现
Dec 27 Python
python爬虫开发之使用Python爬虫库requests多线程抓取猫眼电影TOP100实例
Mar 10 Python
python 实现读取csv数据,分类求和 再写进 csv
May 18 Python
如何用 Python 子进程关闭 Excel 自动化中的弹窗
May 07 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应用程序来获取Web服务器的状态信息
2006/10/09 PHP
PHP文件读写操作之文件写入代码
2011/01/13 PHP
PHP清除字符串中所有无用标签的方法
2014/12/01 PHP
php实现微信模拟登陆、获取用户列表及群发消息功能示例
2017/06/28 PHP
关于PHP虚拟主机概念及如何选择稳定的PHP虚拟主机
2018/11/20 PHP
PHP simplexml_load_file()函数讲解
2019/02/03 PHP
php和nginx交互实例讲解
2019/09/24 PHP
关于setInterval、setTimeout在jQuery中的使用注意事项
2011/09/28 Javascript
js全屏显示显示代码的三种方法
2013/11/11 Javascript
javascript实现数组去重的多种方法
2016/03/14 Javascript
JS实现经典的中国地区三级联动下拉菜单功能实例【测试可用】
2017/06/06 Javascript
VueJs监听window.resize方法示例
2018/01/17 Javascript
浅谈vue项目如何打包扔向服务器
2018/05/08 Javascript
如何用RxJS实现Redux Form
2018/12/29 Javascript
优雅的处理vue项目异常实战记录
2019/06/05 Javascript
vue3.0中使用element的完整步骤
2021/03/04 Vue.js
[02:32]DOTA2亚洲邀请赛 VG战队巡礼
2015/02/03 DOTA
[51:17]Mineski vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.22
2019/09/05 DOTA
利用pandas将非数值数据转换成数值的方式
2019/12/18 Python
Pytorch 多维数组运算过程的索引处理方式
2019/12/27 Python
Python终端输出彩色字符方法详解
2020/02/11 Python
Python使用type动态创建类操作示例
2020/02/29 Python
护理学中专毕业生求职信
2013/11/11 职场文书
教师的实习鉴定
2013/12/15 职场文书
医院护士的求职信范文
2013/12/26 职场文书
小学毕业感言150字
2014/02/05 职场文书
小学生暑假感言
2014/02/06 职场文书
机械工程师岗位职责
2014/06/16 职场文书
学雷锋标语
2014/06/25 职场文书
市级绿色学校申报材料
2014/08/25 职场文书
邀请函怎么写
2015/01/30 职场文书
房屋租赁意向书范本
2015/05/09 职场文书
2015双创工作总结
2015/07/24 职场文书
2015年秋学期师德师风建设工作总结
2015/10/23 职场文书
MySQL 5.7常见数据类型
2021/07/15 MySQL
MySQL数据库实验之 触发器和存储过程
2022/06/21 MySQL