title: Reading output of Top command using Paramiko
body: <p>I am writing a script in Python for login to ssh and read the output of commands just executed. I am using paramiko package for this. I am trying to execute command "top" and get its output printed on the console. However, I am not able to do this. Please find the snippet:</p>
  
  <pre><code>import sys
  import time
  import select
  import paramiko
  
  host = 'localhost'
  i = 1
  
  #
  # Try to connect to the host.
  # Retry a few times if it fails.
  #
  while True:
      print 'Trying to connect to %s (%i/30)' % (host, i)
  
      try:
          ssh = paramiko.SSHClient()
          ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
          ssh.connect(host, port=22, username='dummy', password='dummy')
          print "Connected to %s" % host
          break
      except paramiko.AuthenticationException:
          print "Authentication failed when connecting to %s" % host
          sys.exit(1)
      except:
          print "Could not SSH to %s, waiting for it to start" % host
          i += 1
          time.sleep(2)
  
      # If we could not connect within time limit
      if i == 30:
          print "Could not connect to %s. Giving up" % host
          sys.exit(1)
  
  # Send the command (non-blocking)
  stdin, stdout, stderr = ssh.exec_command("uname")
  
  # Wait for the command to terminate
  while not stdout.channel.exit_status_ready():
      # Only print data if there is data to read in the channel
      if stdout.channel.recv_ready():
          rl, wl, xl = select.select([stdout.channel], [], [], 0.0)
          if len(rl) &gt; 0:
              # Print data from stdout
          print '-------------------------------'
              print stdout.channel.recv(1024)
          print '-------------------------------'
  
  # Send the command (non-blocking)
  stdin, stdout, stderr = ssh.exec_command("top -n 1")
  
  # Wait for the command to terminate
  while not stdout.channel.exit_status_ready():
      # Only print data if there is data to read in the channel
      if stdout.channel.recv_ready():
          rl, wl, xl = select.select([stdout.channel], [], [], 0.0)
          if len(rl) &gt; 0:
              # Print data from stdout
          print '-------------------------------'
              print stdout.channel.recv(1024)
          print '-------------------------------'
  
  # Send the command (non-blocking)
  stdin, stdout, stderr = ssh.exec_command("uname")
  
  # Wait for the command to terminate
  while not stdout.channel.exit_status_ready():
      # Only print data if there is data to read in the channel
      if stdout.channel.recv_ready():
          rl, wl, xl = select.select([stdout.channel], [], [], 0.0)
          if len(rl) &gt; 0:
              # Print data from stdout
          print '-------------------------------'
              print stdout.channel.recv(1024)
          print '-------------------------------'
  
  #
  # Disconnect from the host
  #
  print "Command done, closing SSH connection"
  ssh.close()
  </code></pre>
  
  <p>Output:
  Trying to connect to localhost (1/30)</p>
  
  <h2>Connected to localhost</h2>
  
  <p>Linux</p>
  
  <h2>-------------------------------</h2>
  
  <p>Linux</p>
  
  <hr>
  
  <p>Command done, closing SSH connection</p>
  
  <p>I am not sure, where I am doing wrong. I am able to get output of other linux commands though. But not sure, why top command's output is not getting printed.</p>