python 处理telnet返回的More,以及get想要的那个参数方法
作者:BigDeng_2014 发布时间:2023-02-09 11:32:14
标签:python,telnet,More,get
问题:
需要循环获取网元返回的某个参数,并计算出平均值。
解决方案:
通过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
>>>
'''
来源:https://blog.csdn.net/BigDeng_2014/article/details/76921031
0
投稿
猜你喜欢
- range()是Python的内置函数,用于创建整数的列表,可以生成递增或者递减的数列。xrange也有相同的功能, 今天来看下它们之间的
- PyTorch中实现卷积的重要基础函数1、nn.Conv2d:nn.Conv2d在pytorch中用于实现卷积。nn.Conv2d( &nb
- 更换域名,估计是很多站长都很头疼的事情。通常大家的做法就是把老的域名通过IIS设置做301跳转到新的域名。对于只有一个虚拟空间的站长来说,换
- 不知道大家有没有见过在python数组中使用...符号,因为前段时间读别人代码的时候遇到了这个符号立刻就云里雾里,于是这里特此记录一下。先来
- 本文实例讲述了wxPython窗口的继承机制,分享给大家供大家参考。具体分析如下:示例代码如下:import wx class
- 这里提供三种方法:1,使用正则表达式Function regKillHTML(str) &nb
- 1 lambdalambda原型为:lambda 参数:操作(参数)lambda函数也叫匿名函数,即没有具体名称的函数,它允许快速定义单行函
- 什么是索引 拿汉语字典的目录页(索引)打比方:正如汉语字典中的汉字按页存放一样,SQL Server中的数据记录也是按页存放的,每页容量一般
- 表单外观的美化很多时候,我们仅仅为了实现数据采集这个功能来使用表单,常看到的表单都是“千人一面”、毫无
- 本文实例讲述了PHP abstract 抽象类定义与用法。分享给大家供大家参考,具体如下:PHP抽象类应用要点:1.定义一些方法,子类必须完
- 题目:在提示符下使用open打开一个文件刚开始网上看了下打开的方式,结果一直实现不了,报错是没找到这个文件,而且和我输入的文件名不一样。错误
- 1.INSERT (往数据表里插入记录的语句) INSERT INTO 表名(字段名1, 字段名2, ……) VALUES ( 值1, 值2
- 方法一://PHP stdClass Object转array function object_array($array) {&
- Q:Dreamweaver(简称DW)中如何输入空格?A:按下“Ctrl+Shift+空格键”或者在中
- Apache 从2.2升级到 Apache2.4.x 后配置文件 httpd.conf 的设置方法有了大变化,以前是将 deny from
- 最近开始学Python,想直接通过命令行的方式进行学习。奈何没有Tab补全,操作实在麻烦,网上各种百度后无果(x64系统,x86的可以直接下
- 本文实例讲述了Go语言中使用反射的方法。分享给大家供大家参考。具体实现方法如下:// Data Modeltype Dish struct
- 查询一天:select * from table where to_days(column_time) = to_days(now());s
- 前段时间在论坛上有人问到一个淘宝网上的hover伪类实现的效果如果兼容ie6。其实,问题很简单,就是hover伪类在IE6中得不到很好的支持
- 1、Tkinter是什么Tkinter 是使用 python 进行窗口视窗设计的模块。Tkinter模块(“Tk 接口&