如何使用 re 字符串在 telnet 会话输出中搜索,其中 x 是 1 到 99999 之间的数字?
How do i search in a telnet session output with re a string where x is a number between 1 and 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 + "\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 之间的数字
如果我写“Known via "bgp 6447"”,它会找到并打印它,但如果我写“Known via "bgp xxxxx"”,它会 returns 错误。有人知道为什么吗?
输出是这样的:
路线浏览量>
显示 ip 路由 192.0.2.1
192.0.2.1/32 的路由条目
已知通过 "bgp 6447",距离 20,公制 0
标记 19214,键入外部
最后更新于 208.74.64.40 4 天前
路由描述符块:
208.74.64.40,来自 208.74.64.40,4 天前
路由指标为 0,流量份额计数为 1
AS 跃点 1
路由标记 19214
MPLS 标签:none
路线浏览量>
它给了我 'True' 如果我测试
>>> y = ' Known via "bgp xxxxx"'
>>> re.search('Known via "bgp xxxxx"', y)
>>> if x:
... print "yes"
...
yes
您以完全错误的方式使用正则表达式,请尝试更改整个此部分:
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
Upd. 顺便说一句,你的版本不起作用,因为 x
inside string is interpreted as literal "x"
, not the value of variable x
。如果你想把一个变量放在一个字符串中,你应该像这个例子一样使用格式:
x = 12345
print ' Known via "bgp {}"'.format(x)
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 之间的数字 如果我写“Known via "bgp 6447"”,它会找到并打印它,但如果我写“Known via "bgp xxxxx"”,它会 returns 错误。有人知道为什么吗?
输出是这样的:
路线浏览量>
显示 ip 路由 192.0.2.1
192.0.2.1/32 的路由条目
已知通过 "bgp 6447",距离 20,公制 0
标记 19214,键入外部
最后更新于 208.74.64.40 4 天前
路由描述符块:
208.74.64.40,来自 208.74.64.40,4 天前
路由指标为 0,流量份额计数为 1
AS 跃点 1
路由标记 19214
MPLS 标签:none
路线浏览量>
它给了我 'True' 如果我测试
>>> y = ' Known via "bgp xxxxx"'
>>> re.search('Known via "bgp xxxxx"', y)
>>> if x:
... print "yes"
...
yes
您以完全错误的方式使用正则表达式,请尝试更改整个此部分:
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
Upd. 顺便说一句,你的版本不起作用,因为 x
inside string is interpreted as literal "x"
, not the value of variable x
。如果你想把一个变量放在一个字符串中,你应该像这个例子一样使用格式:
x = 12345
print ' Known via "bgp {}"'.format(x)