2016-07-26 92 views
0

几个小时来,我一直在抨击我的头,研究和重构,但我无法让它工作。Python:字符串中的字符串检查失败

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") 

输出:

的SwitchPort:GE-0/0/3
线:GE-0/0/3.0 *,GE-0/0/47.0,GE-0/1/3.0 *

检查失败

说我有失败的问题是在ELIF部分的主要组成部分。除了其他实例外,我几乎完全匹配if语法和逻辑。什么让我回到一个循环是,switchPort打印匹配一行字符串。有没有人有任何想法可能会绊倒这个?

我试图在检查之前将两个变量转换为字符串,并没有工作。

+0

'stdout.readline()'? –

+0

'SwitchPort'中有'
',但''不在'线路中。 – TigerhawkT3

+0

有时,在控制台中不容易看到的字符串之间存在细微差异。尝试'print('SwitchPort:{!r}'。format(switchPort))'和'print('line:{!r}'。format(line))''。这可能会使差异更容易被发现。 – smarx

回答

0

有时,在控制台中不容易看到的字符串之间存在细微差异。试试这个:

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

它可能会使差异更容易发现。

上面的讨论,这里的实际问题是一个尾随空间。解决方法是改变:

switchPort.strip() 

switchPort = switchPort.strip() 

str.strip没有任何修改;它返回一个新的,剥离,字符串)。