【问题标题】:Printing real-time SSH output using Python 3.x使用 Python 3.x 打印实时 SSH 输出
【发布时间】:2016-10-17 21:24:49
【问题描述】:

我有一个 SSH 从 Windows7 连接到远程 ubuntu 服务器并执行命令的脚本。在命令执行完成后,该脚本会一次性将 Ubuntu 命令输出返回到 Windows cmd 窗口。我只是想知道是否有任何方法可以在下面的脚本中返回实时 SSH 输出,还是我总是必须等待命令完成才能看到输出。

这是我的工作代码:

import paramiko

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
host = '9.10.11.12'
port, user, password = 22, 'usr', 'pass'
ssh.connect(host, port,  user, password)
stdin,stdout,stderr = ssh.exec_command("cd /opt/app && ./app-tool some_command")

for line in stdout.readlines():
    print(line)

ssh.close()

或者,如果 SSH 无法做到这一点,我将如何在上述脚本中引入旋转光标图标?谢谢。

【问题讨论】:

    标签: python python-3.x ssh


    【解决方案1】:

    最后想通了,我在以下行中使用了'iter'方法:

    for line in iter(stdout.readline,""): 
        print(line)
    

    【讨论】:

      【解决方案2】:

      您的命令的输出似乎小于默认缓冲区大小,因为一旦命令完成,它就会被刷新。

      默认情况下bufsize 是-1,这意味着使用系统默认缓冲区大小。如果bufsize 设置为 1,那么它是行缓冲的。

      使用

      ssh.exec_command("<cmd>",bufsize=1)

      【讨论】:

      • 嗨 SilentMonk,我尝试了你的建议,但我得到了相同的结果,即在执行结束时转储输出。
      • 哦,bufsize=0 呢?这意味着没有缓冲。另外,您的命令输出的大小是多少?
      • 嗨 SilentMonk,感谢您的帮助。我玩了一下,最后我使用了代码 >>> for line in iter(stdout.readline,""): print(line)
      猜你喜欢
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 2012-09-30
      • 2019-02-24
      • 2016-04-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多