我已经花了好几个小时的时间来研究和重构这个问题,但我无法让它开始工作。
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打印的代码与一行字符串中的一段相匹配。有人知道是什么让这件事被绊倒了吗?
在检查之前,我尝试将两个变量转换为字符串,但这不起作用。
发布于 2016-07-26 02:56:57
有时,在控制台中很难看到字符串之间的细微差别。试试这个:
print('SwitchPort: {!r}'.format(switchPort))
print('line: {!r}'.format(line))这可能会使区别更容易发现。
根据上面的讨论,这里的实际问题是一个落后的空间。解决办法是改变:
switchPort.strip()至
switchPort = switchPort.strip()(str.strip不修改任何内容;它返回一个新的、已剥离的字符串。)
https://stackoverflow.com/questions/38580272
复制相似问题