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

2024-05-17 15:34:24 发布

您现在位置:Python中文网/ 问答频道 /正文

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”,它会返回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开始,4周前

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

    作为啤酒花1

    路线标签19214

    MPLS标签:无

路线视图>


Tags: importre路由read标签路线viatn
2条回答

如果使用regexp的方式完全错误,请尝试更改整个部分:

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在表达式之前,这里很重要。你知道吗

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

Upd.顺便说一下,您的版本不起作用,因为字符串中的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

相关问题 更多 >