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)
tn.write("show ip route 192.0.2.1"+"\r\n")
y = tn.read_until("free", 10)
print y
tn.write("exit"+ "\r\n")
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。谁知道为什么?
输出是这样的:
路线的视图>
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标签:无
路线的视图>
答案 0 :(得分:0)
如果我测试
,它会给我'真'>>> y = ' Known via "bgp xxxxx"'
>>> re.search('Known via "bgp xxxxx"', y)
>>> if x:
... print "yes"
...
yes
答案 1 :(得分:0)
你以完全错误的方式使用正则表达式,尝试更改整个部分:
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)