如何使用 re 字符串在 telnet 会话输出中搜索,其中 x 是介于 1 和 99999 之间的数字


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 + "rn")
tn.read_until("Password: ", 5)
tn.write(password + "rn")
print tn.read_until(">", 10)
tn.write("show ip route 192.0.2.1"+"rn")
y = tn.read_until("free", 10)
print y
tn.write("exit"+ "rn")
tn.close()
print "Pasul 2"
for x in range(1,99999):
    m = re.search(' Known via "bgp xxxxx"', y)
    if m:
        print (m.group(0))
        break
    else:
        print False
        break

x 必须是介于 1 和 99999 之间的数字如果我写"通过"bgp 6447"已知",它会找到并打印它,但如果我写"通过"bgp xxxxx"已知",它会返回 false。有人知道为什么吗?

输出是这样的:

路由视图>

显示 IP 路由 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 啤酒花 1

    路由标签 19214

    MPLS 标签:无

路由视图>

您以

完全错误的方式使用正则表达式,请尝试更改整个本节:

for x in range(1,99999):
    m = re.search(' Known via "bgp xxxxx"', y)
    if m:
        print (m.group(0))
        break
    else:
        print False
        break

具有以下功能:

m = re.search(r'Known via "bgp d{0,5}"', y)
if m:
   print m.group(0)
else:
   print False

在表达之前注意r,这在这里很重要。

可能你应该阅读这个 python re 模块的文档:https://docs.python.org/2/library/re.html

更新。顺便说一下,你的版本不起作用x因为字符串内部被解释为文字"x",而不是变量x的值。如果要将变量放在字符串中,则应使用如下例中的格式:

x = 12345
print ' Known via "bgp {}"'.format(x)

如果我测试,它会给我"真">

>>> y = ' Known via "bgp xxxxx"'
>>> re.search('Known via "bgp xxxxx"', y)
>>> if x:
...     print "yes"
...
yes

最新更新