我遇到了一个困扰我几天的问题。我在Python 2.7.10中使用了Paramiko模块,我想向Brocade路由器发出多个命令,但仅返回给定命令之一的输出,如下所示:
#!/usr/bin/env python import paramiko, time router = 'r1.test.example.com' password = 'password' username = 'testuser' ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(router, username=username, password=password) print('Successfully connected to %s' % router) remote_conn = ssh.invoke_shell() output = remote_conn.recv(1000) # Disable paging on Brocade. remote_conn.send('terminal length 0\n') # Check interface status. remote_conn.send('show interfaces ethernet 0/1\n') # I only want output from this command. time.sleep(2) output = remote_conn.recv(5000) print(output)
如果要打印完整的输出,它将包含发布到路由器的所有内容,但是我只想查看showinterfaces ethernet 0/1\n命令的输出。
interfaces ethernet 0/1\n
谁能解决这个问题?
我想问的最后一件事。我想过滤output变量并检查是否出现诸如“ up”或“ down”之类的字符串,但是由于输出中的所有内容似乎都在新行上,所以我似乎无法使其正常工作?
output
例如:
如果我output在for循环中遍历变量,则将获得变量中的所有字符,如下所示:
for line in output: print(line)
我得到这样的输出:
Ť
Ë
[R
米
一世
ñ
一种
升
G
H
0
可以解决吗?
再次,
在此先感谢您的帮助。
最好的祝福,
亚伦C.
对于您的第二个问题:尽管我不是paramiko的专家,但根据doc,我看到该函数recv返回一个字符串。如果在字符串上应用 for 循环,则会得到字符(而不是可能期望的行)。换行符是由于您使用本页第6.3节中所述的打印功能所致。
我还没有研究paramiko建议做什么。但是,为什么不将完整的字符串视为单个实体呢?例如,您可以通过以下方式检查“ up”的存在:
if "up" in output:
或者,如果更适合您的需求,则可以将字符串分成几行,然后执行您想做的任何测试:
for line in output.split('\n'):