当前位置: 首页 > 面试题库 >

Paramiko捕获命令输出

富辰阳
2023-03-14
问题内容

我遇到了一个困扰我几天的问题。我在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命令的输出。

谁能解决这个问题?

我想问的最后一件事。我想过滤output变量并检查是否出现诸如“ up”或“
down”之类的字符串,但是由于输出中的所有内容似乎都在新行上,所以我似乎无法使其正常工作?

例如:

如果我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'):


 类似资料:
  • 问题内容: 我想编写一个函数,该函数将执行shell命令并以字符串形式返回其输出,无论是错误还是成功消息。我只想获得与命令行相同的结果。 能做到这一点的代码示例是什么? 例如: 问题答案: 这个问题的答案取决于你使用的Python版本。最简单的方法是使用以下功能: 该功能适用于仍在广泛使用的几乎所有版本的Python(2.7+)。2但对于较新的版本,不再推荐使用此方法。 现代版本的Python(3

  • 问题内容: 我尝试运行此脚本: 现在的问题是:我怎样才能把这些变量,,到变量? 问题答案: Python有很多执行字符串格式化的方法。最简单的方法之一就是将字符串的各个部分简单地串联在一起:

  • 问题内容: 当我尝试去做 我得到一个空的输出。 预期输出为: 问题答案: 如果没有输出,通常是因为命令无法启动。 阅读()以检查是否有任何错误。

  • 问题内容: 我想将特定“ top”命令的输出写入文件。我做了一些谷歌搜索,发现可以通过使用以下命令来完成。 其中-n用于指定迭代次数,-b用于批处理模式。如果让top进行10次迭代,则效果很好。但是,如果我用Ctrl-C中断了命令的运行,则输出文件似乎为空。 我不会事先知道迭代次数,因此我需要手动中断它。如何在不指定迭代的情况下捕获文件top的输出? 我想精确使用的命令是 并在需要时将其断开。但这

  • 问题内容: 所以我正在与paramiko一起进行一些基本的SSH测试,并且没有将任何输出输出到stdout中。这是我的代码。 因此,每当我运行此命令时,都会执行该命令(如执行cp之类的操作所看到的那样,文件将被复制),但是我始终会收到“此命令无输出”的信息。当输出stdout = stdout.readlines()时,输出为[]。另外,如果我将打印语句添加到for循环中,它将永远不会运行。有人可

  • 除非你开发的是非常简单的控制台应用, 否则你应该不希望php脚本代码产生的输出 直接被扔到激活的终端上. 捕获这些输出和你刚才用以覆写启动处理器的方法类似. 在sapi_module_struct中还有⼀些有用的回调: typedef struct _sapi_module_struct { ... int (*ub_write)(const char *str, unsigned