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