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程序员鲜为人知但你应该知道的17个问题
Jun 04 Python
python常用web框架简单性能测试结果分享(包含django、flask、bottle、tornado)
Aug 25 Python
Python2.x中str与unicode相关问题的解决方法
Mar 30 Python
Python实现Linux中的du命令
Jun 12 Python
深入了解如何基于Python读写Kafka
Dec 31 Python
利用PyQt中的QThread类实现多线程
Feb 18 Python
python模拟实现分发扑克牌
Apr 22 Python
Python3之乱码\xe6\x97\xa0\xe6\xb3\x95处理方式
May 11 Python
Django中和时区相关的安全问题详解
Oct 12 Python
python 通过 pybind11 使用Eigen加速代码的步骤
Dec 07 Python
Tensorflow与RNN、双向LSTM等的踩坑记录及解决
May 31 Python
python迷宫问题深度优先遍历实例
Jun 20 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
BBS(php & mysql)完整版(八)
2006/10/09 PHP
如何跨站抓取别的站点的页面的补充
2006/10/09 PHP
深入php list()函数的详解
2013/06/05 PHP
PHP验证码函数代码(简单实用)
2013/09/29 PHP
PHP多线程编程之管道通信实例分析
2015/03/07 PHP
phpStudy中升级MySQL版本到5.7.17的方法步骤
2017/08/03 PHP
基于mouseout和mouseover等类似事件的冒泡问题解决方法
2013/11/18 Javascript
get(0).tagName获得作用标签示例代码
2014/10/08 Javascript
JavaScript跨浏览器获取页面中相同class节点的方法
2015/03/03 Javascript
谈谈encodeURI和encodeURIComponent以及escape的区别与应用
2015/11/24 Javascript
javascript中加var和不加var的区别 你真的懂吗
2016/01/06 Javascript
jQuery前端开发35个小技巧
2016/05/24 Javascript
Node.js Mongodb 密码特殊字符 @的解决方法
2017/04/11 Javascript
Angular中自定义Debounce Click指令防止重复点击
2017/07/26 Javascript
vue2.0路由切换后页面滚动位置不变BUG的解决方法
2018/03/14 Javascript
D3.js实现简洁实用的动态仪表盘的示例
2018/04/04 Javascript
微信小程序实现动态获取元素宽高的方法分析
2018/12/10 Javascript
vue中过滤器filter的讲解
2019/01/21 Javascript
利用es6 new.target来对模拟抽象类的方法
2019/05/10 Javascript
Vue中多元素过渡特效的解决方案
2020/02/05 Javascript
微信小程序用canvas画图并分享
2020/03/09 Javascript
python使用xauth方式登录饭否网然后发消息
2014/04/11 Python
Python使用redis pool的一种单例实现方式
2016/04/16 Python
python发送邮件功能实现代码
2016/07/15 Python
详解python中的 is 操作符
2017/12/26 Python
pytorch构建网络模型的4种方法
2018/04/13 Python
pandas的唯一值、值计数以及成员资格的示例
2018/07/25 Python
Python使用import导入本地脚本及导入模块的技巧总结
2019/08/07 Python
Python列表操作方法详解
2020/02/09 Python
python能在浏览器能运行吗
2020/06/17 Python
美国艺术和工艺品商店:Hobby Lobby
2020/12/09 全球购物
环境工程与管理大学毕业生求职信
2013/10/02 职场文书
校友会致辞
2015/07/30 职场文书
2016年元旦致辞
2015/08/01 职场文书
2016年综治宣传月活动宣传标语口号
2016/03/16 职场文书
angular异步验证器防抖实例详解
2022/03/31 Javascript