Python Paramiko客户端SSH在读取标准输出时非常慢

2024-04-26 13:24:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Paramiko通过SSH控制VM。当我发送任何命令时,它几乎立即执行,但当从标准输出读取输出时,它将花费永远的时间

我有大约5秒钟的时间让ls阅读:

执行命令的时间:0.1445319652557373

读取输出的时间:5.382704973220825

这里有一个小笑话:

import time
import paramiko

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname="192.168.0.123",
        port=1234,
        username="admin",
        password="admin")

t1 = time.time()
stdin, stdout, stderr = ssh.exec_command("powershell -command \"ls -recurse .\"")
t2 = time.time()

t3 = time.time()
print(stdout.readlines())
t4 = time.time()

print(t2 - t1)
print(t4 - t3)

谢谢大家!


Tags: importparamikoadmintimestdout时间lsssh
1条回答
网友
1楼 · 发布于 2024-04-26 13:24:41

stdout.readlines()正在子进程完成之前读取所有行,并将EOF发送到主进程。如果希望在可用时逐行读取,则执行for line in exp.stdout,file对象允许您在每行上迭代,作为其通过管道的提要。否则,使用stdout, stderr = Subprocess.communicate(None)可能更好,因为通信方法使用更好的系统调用从子进程(如epoll、select、poll)读取数据

相关问题 更多 >