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

How do i search with re in a telnet session output?

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

我在输出中搜索的任何内容 return 都是错误的。为什么?应该是return这个词。

这是输出:

帕苏尔 1

路线视图> 显示 ip 路由 192.0.2.1

192.0.2.1/32 的路由条目

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

标记 19214,键入外部

最后更新于 208.74.64.40 4 天前

路由描述符块:

路线浏览量>

帕苏尔 2

您没有搜索完整的字符串。我需要在搜索之前查看 y 的内容,但看起来搜索时的值是 show ip route 192.0.2.1\r\n。根据他们的文档 Python re.search,这会 return None

我认为您可以像 tn.read_until("$") 那样阅读整个会话。否则我会把所有的读取连接成一个字符串并搜索它。所以在每个读取调用中

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

您需要将来自 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