2016-04-18 3 views
0
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 hat eine Zahl zwischen 1 und 99999 sein, wenn ich schreibe ‚bekannt über‚BGP 6447‘‘ wird es finden und drucken, aber wenn ich schreibe ‚bekannt über‚BGP xxxxx‘‘, es false zurück . Jeder weiß warum?Wie suche ich in einer Telnet-Session-Ausgabe mit einem String, wobei x eine Zahl zwischen 1 und 99999 ist?

Der Ausgang ist dies:

Route-Ansichten>

show ip route 192.0.2.1

Routing-Eintrag für 192.0.2.1/32

über "BGP-6447" bekannt, Entfernung 20, metric 0

Tag 19214, Typ externer

Letzte Aktualisierung von 208.74.64.40 4w0d vor

Routing Descriptor Blocks:

  • 208.74.64.40, von 208.74.64.40, 4w0d vor

    Routenmetrik 0, Verkehrsaktienanzahl 1

    AS Hops 1

    Routen Tag 19214

    MPLS-Label:

    kein

Route-Ansichten>

Antwort

0

Sie regexp in einem völlig falschen Weg, versuchen die sie wandelnde ganzer diesen Abschnitt:

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 

mit folgenden:

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

Und beachten Sie r vor dem Ausdruck, es ist hier wichtig.

Wahrscheinlich sollten Sie diese Dokumentation für Python re Modul lesen: https://docs.python.org/2/library/re.html

Upd. Übrigens funktioniert Ihre Version nicht, weil x innerhalb String als Literal "x" interpretiert wird, nicht der Wert der Variablen x. Wenn Sie eine Variable in einem String setzen mögen, sollten Sie die Formatierung wie in diesem Beispiel verwenden:

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

Vielen Dank! –

+0

Verstanden, vielen Dank. –

0

Es gibt mir 'True', wenn ich teste

>>> y = ' Known via "bgp xxxxx"' 
>>> re.search('Known via "bgp xxxxx"', y) 

>>> if x: 
...  print "yes" 
... 
yes 
+0

man nicht alles gelesen hat, x eine Zahl zwischen 1 und 99999, in der ‚show ip route‘ ist es so : Bekannte über "bgp 6447", ich brauche etwas zu suchen mit der "Bekannte via" bgp xxxxx "" und geben Sie mir bekannt über "bgp 6447" –

Verwandte Themen