python 处理telnet返回的More,以及get想要的那个参数方法

作者:BigDeng_2014 时间:2023-02-09 11:32:14 

问题:

需要循环获取网元返回的某个参数,并计算出平均值。

解决方案:

通过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

标签:python,telnet,More,get
0
投稿

猜你喜欢

  • 使用Python的networkx绘制精美网络图教程

    2022-10-31 06:52:47
  • 全网首秀之Pycharm十大实用技巧(推荐)

    2023-08-09 16:11:00
  • 浅析DW4中的站点管理

    2007-02-03 11:40:00
  • java正则表达式之Pattern与Matcher类详解

    2023-06-21 10:14:03
  • Python接口自动化浅析登录接口测试实战

    2021-06-06 21:48:13
  • Python实现统计给定字符串中重复模式最高子串功能示例

    2023-07-22 23:42:44
  • Python 中导入文本文件的示例代码

    2021-04-18 04:53:01
  • ASP IE地址栏参数的判断

    2011-04-03 11:21:00
  • Python实现迪杰斯特拉算法过程解析

    2022-08-14 09:55:42
  • (小技巧)复制消息对话框的内容

    2008-10-21 10:51:00
  • 基于AJAX技术提高搜索引擎排名

    2008-01-24 12:45:00
  • JavaScript监听和禁用浏览器回车事件实例

    2023-10-12 01:58:16
  • 微信小程序request请求后台接口php的实例详解

    2023-11-11 14:24:04
  • python manim实现排序算法动画示例

    2021-11-10 10:41:58
  • python一行代码合并了162个Word文件

    2022-07-24 04:20:57
  • 发一个较复杂的字符串截取函数

    2009-12-08 16:23:00
  • 解决GOPATH在GOLAND中的坑

    2023-07-12 23:46:16
  • 推荐9款很棒的网页绘制图表JavaScript框架脚本

    2009-04-15 12:13:00
  • 比较SQL Server与Oracle、DB2三种数据库

    2008-09-12 17:24:00
  • SHA256算法 asp源码

    2009-08-28 13:01:00
  • asp之家 网络编程 m.aspxhome.com