如何在telnet会话输出中使用re进行搜索?

时间:2016-04-18 13:42:40

标签: python python-2.7 module telnetlib

import getpass
import sys
import telnetlib
import re
import smtplib

print "Pasul 1"

HOST = "route-views.routeviews.org"
user = "rviews"
password = ""

tn = telnetlib.Telnet(HOST)

tn.read_until("login: ", 5)
tn.write(user + "\r\n")

tn.read_until("Password: ", 5)
tn.write(password + "\r\n")

print tn.read_until(">", 10)
y = str(tn.write("show ip route 192.0.2.1"+"\r\n"))

print tn.read_until("free", 10)
tn.write("exit"+ "\r\n")

tn.close()

print "Pasul 2"

m = re.search('Last', y)
if m:
    print (m.group(0))
else:
    print False

我在输出中搜索的任何内容都会返回False。为什么?它应该返回单词。

这是输出:

Pasul 1

路线的视图> show ip route 192.0.2.1

192.0.2.1/32的路由条目

通过“bgp 6447”已知,距离20,公制0

标记19214,输入外部

最后更新自208.74.64.40 4w0d前

路由描述符块:

  • 208.74.64.40,来自208.74.64.40,4w0d前

    路由度量为0,流量共享计数为1

    AS Hops 1

    路线标记19214

    MPLS标签:无

路线的视图>

Pasul 2

2 个答案:

答案 0 :(得分:0)

你没有搜索完整的字符串。我需要在搜索之前看到y的内容,但看起来搜索时的值为show ip route 192.0.2.1\r\n。哪个会根据他们的文档Python re.search返回None

我认为您可以执行tn.read_until("$")之类的操作来阅读整个会话。否则我只是将所有读取连接成一个字符串并搜索它。所以在每次阅读电话中

y = "%s %s" % (y, tn.read_until('my_val', 5)

答案 1 :(得分:0)

您需要将来自telnet会话的字符串存储到y才能生效。目前,由于此行,您将"show ip route 192.0.2.1\r\n"存储在y中:

y = str(tn.write("show ip route 192.0.2.1"+"\r\n"))

为了做你想要的事情,你必须存储tn.read_until("free", 10)以便以后能够搜索它。目前,您只是将其打印出来。

示例替换:

print tn.read_until("free", 10)

y = tn.read_until("free", 10)
print y