Python Paramiko 客户端 SSH 在读取标准输出时非常慢
Python Paramiko Client SSH very slow when read stdout
我正在使用 Paramiko 通过 SSH 控制虚拟机。当我发送任何命令时,它几乎立即执行,但是当从 stdout 读取输出时,它会永远执行。
我有大约 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
,文件对象允许你迭代每一行作为它通过管道的馈送。否则,使用 stdout, stderr = Subprocess.communicate(None)
可能会更好,因为通信方法使用更好的系统调用从子进程读取数据(如 epoll、select、poll)。
我正在使用 Paramiko 通过 SSH 控制虚拟机。当我发送任何命令时,它几乎立即执行,但是当从 stdout 读取输出时,它会永远执行。
我有大约 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
,文件对象允许你迭代每一行作为它通过管道的馈送。否则,使用 stdout, stderr = Subprocess.communicate(None)
可能会更好,因为通信方法使用更好的系统调用从子进程读取数据(如 epoll、select、poll)。