在python中从telnet客户机获取iterable输出

2024-05-01 21:27:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试编写一个脚本来对网络设备(路由器、交换机)执行验证检查。我正在使用telnet向设备发送命令。我存储命令的输出telnetobject.read\u直到(提示)输入到文件中,然后通过一次迭代一行对存储的输出运行一些验证检查。 有没有一种方法可以迭代输出而不将其存储在文件中?问题是read\u until选项给出了一个字符串形式的输出,而我尝试测试的设备的输出有一个表格形式的输出,但每行上没有一致的分隔符。你知道吗

这是一个例子: 导入telnetlib

tn=telnetlib.Telnet('ip address')
pwd='password'
uid='userid'

tn.read_until("login: ")
tn.write(uid + "\n")
tn.read_until("Password:")
tn.write(pwd +'\n')
tn.read_until(">",5)
tn.write('port statistics show' + '\n')
op1=tn.read_until("*>",5)
with open ('stattest-temp.txt','w') as stat:
 stat.write(op1)

上面的代码是获取一个特定的输出并将其存储在一个文件中 下面的代码是迭代输出..问题是它是一个表格形式,以多个“\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\阅读直到就像一根巨大的绳子

with open ('stattest-temp.txt','r') as f:


 for line_no,line in enumerate(f):
   if line_no>5:
    if '+---------------------------------+----------------+-----------+-----------+------------+\r' in line:
     break
    else:
     x=line[:-1].split("|")
     #print x
     x1=x[1].strip()
     x2=x[2].strip()
     x3=x[3].strip()
     x4=x[4].strip()
     x5=x[5].strip()
     if x4 =="YES":
       print x1,x4
       print 'Traffic loss observed'

     elif x4=="No":
      print "session recovered"

我正在寻找一种方法来完成上述代码的第2部分,而不必将输出写入文件


Tags: 文件方法代码命令readifline形式
1条回答
网友
1楼 · 发布于 2024-05-01 21:27:30

我认为,如果将输出字符串拆分为换行符,应该可以复制保存到文件和遍历行的效果。基本上在for循环之前设置:

 f = op1.split('\n')

 for line_no,line in enumerate(f):
   if line_no>5:
    if '+                -+        +     -+     -+      +\r' in line:
     break
    else:
     x=line[:-1].split("|")
     #print x
     x1=x[1].strip()
     x2=x[2].strip()
     x3=x[3].strip()
     x4=x[4].strip()
     x5=x[5].strip()
     if x4 =="YES":
       print x1,x4
       print 'Traffic loss observed'

     elif x4=="No":
      print "session recovered"

相关问题 更多 >