Issue
Here I am trying to execute ssh commands and print the output. It works fine except the command top
.
Any lead how to collect the output from 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)
Solution
The top
is a fancy command that requires a terminal/PTY. While you can enable the terminal emulation using get_pty
argument of SSHClient.exec_command
, it would get you lot of garbage with ANSI escape codes. I'm not sure you want that. The terminal is for interactive human use only. If you want to automate things, do not mess with terminal.
Rather, execute the top
in batch mode:
top -b -n 1
See get top
output for non interactive shell.
Answered By - Martin Prikryl Answer Checked By - David Marino (WPSolving Volunteer)