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下paramiko模块实现ssh连接登录Linux服务器
Jun 03 Python
使用Python从有道词典网页获取单词翻译
Jul 03 Python
python用pickle模块实现“增删改查”的简易功能
Jun 07 Python
Python的CGIHTTPServer交互实现详解
Feb 08 Python
Python2.7版os.path.isdir中文路径返回false的解决方法
Jun 21 Python
python tkinter窗口最大化的实现
Jul 15 Python
python数值基础知识浅析
Nov 19 Python
python PIL/cv2/base64相互转换实例
Jan 09 Python
Tensorflow分批量读取数据教程
Feb 07 Python
django-csrf使用和禁用方式
Mar 13 Python
python3通过subprocess模块调用脚本并和脚本交互的操作
Dec 05 Python
用python批量下载apk
Dec 29 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
Smarty的配置与高级缓存技术分享
2012/06/05 PHP
PHP屏蔽关键字实现方法
2016/11/17 PHP
jQuery使用before()和after()在元素前后添加内容的方法
2015/03/26 Javascript
Angularjs制作简单的路由功能demo
2015/04/14 Javascript
javascript顺序加载图片的方法
2015/07/18 Javascript
javascript 中null和undefined区分和比较
2017/04/19 Javascript
nodejs接入阿里大鱼短信验证码的方法
2017/07/10 NodeJs
vue 封装自定义组件之tabal列表编辑单元格组件实例代码
2017/09/07 Javascript
详解基于React.js和Node.js的SSR实现方案
2019/03/21 Javascript
Node.js使用supervisor进行开发中调试的方法
2019/03/26 Javascript
微信小程序引入Vant组件库过程解析
2019/08/06 Javascript
基于vue.js实现购物车
2020/01/15 Javascript
JavaScript Event Loop相关原理解析
2020/06/10 Javascript
[05:07]DOTA2英雄梦之声_第14期_暗影恶魔
2014/06/20 DOTA
Python中MySQL数据迁移到MongoDB脚本的方法
2016/04/28 Python
python实现多线程抓取知乎用户
2016/12/12 Python
python处理按钮消息的实例详解
2017/07/11 Python
Python函数式编程
2017/07/20 Python
Python中if elif else及缩进的使用简述
2018/05/31 Python
使用pytorch进行图像的顺序读取方法
2018/07/27 Python
创建Django项目图文实例详解
2019/06/06 Python
python 数据提取及拆分的实现代码
2019/08/26 Python
使用Pandas将inf, nan转化成特定的值
2019/12/19 Python
ITK 实现多张图像转成单个nii.gz或mha文件案例
2020/07/01 Python
python使用numpy中的size()函数实例用法详解
2021/01/29 Python
瑞士香水购物网站:Parfumcity.ch
2017/01/14 全球购物
瑞士图书网站:Weltbild.ch
2019/09/17 全球购物
介绍一下游标
2012/01/10 面试题
什么是Oracle的后台进程background processes?都有哪些后台进程?
2012/04/26 面试题
大学新生军训个人的自我评价
2013/10/03 职场文书
食品业务员岗位职责
2014/03/18 职场文书
让生命充满爱观后感
2015/06/08 职场文书
办公室日常管理制度
2015/08/04 职场文书
浅谈由position属性引申的css进阶讨论
2021/05/25 HTML / CSS
变长双向rnn的正确使用姿势教学
2021/05/31 Python
python和C/C++混合编程之使用ctypes调用 C/C++的dll
2022/04/29 Python