Python Parallel SSH 仅获取命令输出

Posted

技术标签:

【中文标题】Python Parallel SSH 仅获取命令输出【英文标题】:Python Parallel SSH get only command output 【发布时间】:2016-03-09 05:07:45 【问题描述】:

我是 Python 新手,我希望对设备运行多个并行 ssh 连接和命令。我正在使用psshlink。 问题是设备在连接后返回一些大标题,如 20-30 行。 当我使用下面的代码时,打印出来的是命令的结果,但在顶部还有登录后打印的大标题。

hosts = ['XX.XXX.XX.XXX']

client = ParallelSSHClient(hosts, user='XXXX', password='XXXXX')
output = client.run_command('command')

for host in output:
    for line in output[host]['stdout']:
        print line

无论如何我都能得到命令输出?

【问题讨论】:

【参考方案1】:

我不确定我理解你的意思。 我也在使用 pssh,似乎我正在使用与您相同的方法来打印我的命令输出,见下文:

client = pssh.ParallelSSHClient(nodes, pool_size=args.batch, timeout=10, num_retries=1)
output = client.run_command(command, sudo=True)
    for node in output:
        for line in output[node]['stdout']:
            print '[0]  1'.format(node, line)

您能详细说明一下吗?也许提供一个你运行的命令和你得到的输出的例子?

【讨论】:

我不得不真正放弃 ParallelSSH 并转向 paramiko 和线程。设备在登录时输出标准输出。我还必须对 SSHClient 源代码进行一些更改,因为该设备没有 bash,所以我认为最好放弃它。如果你想继续聊天,我仍然遇到一些性能问题。 如果有问题的设备在登录时输出到标准输出,您将在您使用的任何 SSH 客户端中看到该输出。标准输出就是标准输出。查看更改日志,从去年开始,parallel-ssh 不再需要 bash,可能想看看它是否能解决您的性能问题。提示 - 线程在并行网络连接中表现不佳。【参考方案2】:

结帐 pssh。 该工具使用多线程,执行速度快。 你可以阅读更多关于它的信息here。

【讨论】:

以上是关于Python Parallel SSH 仅获取命令输出的主要内容,如果未能解决你的问题,请参考以下文章

使用 Parallel::ForkManager 并行执行命令

python parallel发送1000+ url请求并获取内容信息

Perl 5.8 从 SSH 命令获取标准输出

将结果数据附加到 Parallel::ForkManager Perl 中的标量变量

如何仅获取远程 git 操作来触发 ssh-agent 的 ssh-add 事件?

Linux下批量管理工具PSSH