在 Python 中使用 Paramiko 收集 top 命令的输出
Collect output from top command using Paramiko in Python
我在这里尝试执行 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)
top
是一个需要终端的奇特命令。虽然您可以使用 SSHClient.exec_command
的 get_pty
参数启用终端仿真,但它会给您带来大量带有 ANSI 转义码的垃圾。我不确定你想要那个。
相反,以批处理模式执行 top
:
top -b -n 1
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)
我在这里尝试执行 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)
top
是一个需要终端的奇特命令。虽然您可以使用 SSHClient.exec_command
的 get_pty
参数启用终端仿真,但它会给您带来大量带有 ANSI 转义码的垃圾。我不确定你想要那个。
相反,以批处理模式执行 top
:
top -b -n 1
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)