在 Python 中使用 Paramiko 收集 top 命令的输出

问题描述 投票:0回答:2

这里我尝试执行 ssh 命令并打印输出。除了命令

top
之外,它工作正常。 任何线索如何收集顶部的输出?

import paramiko
from paramiko import SSHClient, AutoAddPolicy, RSAKey

output_cmd_list = ['ls','top']

ssh = paramiko.SSHClient()
ssh.load_system_host_keys()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname_ip, port, username, password)

for each_command in output_cmd_list:
    stdin, stdout, stderr = ssh.exec_command(each_command)
    stdout.channel.recv_exit_status()
    outlines = stdout.readlines()
    resp = ''.join(outlines)
    print(resp)    
python shell ssh paramiko top-command
2个回答
2
投票

top
是一个需要终端/PTY 的奇特命令。虽然您可以使用
get_pty
SSHClient.exec_command
参数启用终端仿真,但使用 ANSI 转义码会产生大量垃圾。我不确定你想要那个。该终端仅供交互式人类使用。如果您想自动化操作,请不要弄乱终端。

相反,以批处理模式执行

top

top -b -n 1

请参阅 获取

top
非交互式 shell 的输出


0
投票

exe_command 中有一个选项 [get_pty=True] 提供伪终端。 在这里,我通过在代码中添加相同的内容获得了输出。

import paramiko
from paramiko import SSHClient, AutoAddPolicy, RSAKey

output_cmd_list = ['ls','top']

ssh = paramiko.SSHClient()
ssh.load_system_host_keys()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname_ip, port, username, password)

for command in output_cmd_list:
    stdin, stdout, stderr = ssh.exec_command(command,get_pty=True)
    stdout.channel.recv_exit_status()
    outlines = stdout.readlines()
    resp = ''.join(outlines)
    print(resp)  
© www.soinside.com 2019 - 2024. All rights reserved.