【问题标题】:Using PARAMIKO for SSH connection printing partially Live Traces [duplicate]使用 PARAMIKO 进行 SSH 连接打印部分 Live Traces [重复]
【发布时间】:2022-01-20 21:15:47
【问题描述】:

全部,

请帮我解决以下问题。

我有一个 linux 设备,我使用 python 脚本中的 PAAMIKO 模块通过 SSH 连接到该设备。

问题是,基本上,如果我向设备发送命令,链接“ping google.com”,输出只会在命令完成后显示(在这种情况下永远不会)所以我必须使用“ping -例如 n 2 google.com),并且仅在完成对 google.com 的 2 次 ping 操作后才会显示输出。

问题是并非所有应用程序都支持超时参数,例如我不能使用“tail -f /file”,因为拖尾永远不会完成,所以输出永远不会被打印,也不会得到其他由设备部分打印的实时轨迹。 脚本现在就是这样使用的。

elif action == "cmd":
            cmd = command
            (stdin, stdout, stderr) = ssh.exec_command(cmd)
            out = stdout.readline()
            if out:
                print(out.replace("â", "").replace("ââ", ""))     # only for case "systemctl --failed"
            else:
                print(stderr.read().decode('ISO-8859-1'))
        else:
            print("Your action: {} is invalid".format(action))
            sys.exit(11)

【问题讨论】:

  • stdout.readline() 不应等待命令完成。一旦你得到第一行,它应该会返回。

标签: python linux ssh paramiko


【解决方案1】:

我是新手,不幸的是,我现在无法对此进行测试,但是即使输出需要一些时间,命令的输出也应该写入 stdout。如果您继续执行下一个命令并在设备能够写入 stdout 之前读取它,那么您将看不到您的输出。如果你输入一个睡眠命令然后读取标准输出,它会显示你 ping 的结果吗?

from time import sleep
stdin, stdout, stderr = ssh.exec_command('ping 8.8.8.8')
sleep(5)
output = stdout.readlines()
print(output) 

【讨论】:

  • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
  • 我相信 OP 想要连续读取输出。不要等待命令完成并读取完整的输出。
猜你喜欢
  • 1970-01-01
  • 2014-08-06
  • 2020-11-08
  • 2012-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多