【问题标题】:Collect output from top command using Paramiko in Python在 Python 中使用 Paramiko 从 top 命令收集输出
【发布时间】:2021-05-05 15:49:24
【问题描述】:

我在这里尝试执行 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


    【解决方案1】:

    top 是一个需要终端的花哨命令。虽然您可以使用SSHClient.exec_commandget_pty 参数启用终端仿真,但它会给您带来大量带有ANSI 转义码的垃圾。我不确定你想要那个。

    而是以批处理模式执行top

    top -b -n 1
    

    get top output for non interactive shell

    【讨论】:

      【解决方案2】:

      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)  
      

      【讨论】:

      • 这就是我在回答中写的,我从未收到您的任何反馈。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-26
      • 2022-06-15
      • 1970-01-01
      • 2014-10-30
      相关资源
      最近更新 更多