2016-07-26 8 views
0

Ich habe meinen Kopf dagegen stundenlang geschlagen, recherchiert und refactoring, aber ich kann es nicht zur Arbeit bringen.Python: String in String-Check schlägt fehl

import paramiko 
import sys 
ssh = paramiko.SSHClient() 
ssh.set_missing_host_key_policy(
    paramiko.AutoAddPolicy()) 
ssh.connect(switch, username='user', 
    password='pass') 
stdin,stdout,stderr = ssh.exec_command("show interfaces descriptions") 
line = stdout.readline() 
while line != "": 
    if ("UNIT " + unit) in line: 
     switchPort = line [:9] 
     switchPort.strip() 
    line = stdout.readline() 
print (switchPort) 
command = "show vlans" 
stdin,stdout,stderr = ssh.exec_command(command) 
line = stdout.readline() 
while line != "":  
    if acronym + "-s" in line or acronym + "-r" in line or ("subscribed" in line and "un" not in line and "pvlan" not in line): 
     line.strip(' ') 
     subscribedVlan = ''.join([i for i in line if i.isdigit()]) 
     line=stdout.readline() 
     if switchPort in line: 
      portVlan = "Subscribed" 

    elif "un" in line and "pvlan" not in line: 
     unsubscribedVlan = ''.join([i for i in line if i.isdigit()]) 
     if switchPort in line: 
      portVlan = "Unsubscribed" 
     else: 
      line=stdout.readline() 
      print ("SwitchPort: " + switchPort) 
      print ("line: " + line) 
      if switchPort in line: 
       portVlan = "Unsubscribed" 
       print ("In Unsubscribed") 
      else: 
       print("Check Failed") 

Der Ausgang:

Switch: ge-0/0/3
line: ge-0/0/3,0 *, ge-0/0/47,0, ge-0/1/3.0 *

Prüfung fehlgeschlagen

der Hauptteil, dass ich Probleme mit andernfalls habe im Elif Teil. Ich hatte es mit dem If in Syntax und Logik, fast genau, außer für die anderen Instanzen. Was mich zu einer Schleife bringt, ist, dass der gedruckte switchPort zu einem Stück der Linie passt. Hat jemand eine Idee, was könnte das ausstoßen?

Ich versuchte, beide Variablen in Zeichenfolgen vor der Überprüfung zu konvertieren, und das hat nicht funktioniert.

+0

'stdout.readline()'? –

+0

Es gibt eine '
'in' SwitchPort', aber nicht in 'line'. – TigerhawkT3

+0

Manchmal gibt es kleine Unterschiede zwischen Strings, die in der Konsole nicht einfach zu sehen sind. Probieren Sie 'print ('SwitchPort: {! R}'. Format (switchPort))' und 'print ('line: {! R}'. Format (line))'. Es kann den Unterschied leichter ausmachen. – smarx

Antwort

0

Manchmal gibt es kleine Unterschiede zwischen Strings, die in der Konsole nicht einfach zu sehen sind. Versuchen Sie dies:

print('SwitchPort: {!r}'.format(switchPort)) 
print('line: {!r}'.format(line)) 

Es wird wahrscheinlich machen den Unterschied leichter zu erkennen.

Laut der obigen Diskussion war das eigentliche Problem hier ein Leerzeichen. Die Lösung ist zu ändern:

switchPort.strip() 

zu

switchPort = switchPort.strip() 

(str.strip nichts ändern, es gibt ein neues, gestrippt String.)