我正在使用paramiko在远程计算机上运行rsync。当我使用stdout.readlines()时,它会阻止我的程序并在命令结束后输出大量的行。我知道rsync进度总是更新它的输出。如何在不等待命令完成的情况下每隔一段时间读取输出(我正在传输一个非常大的文件)。
import paramiko
import time
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(...)
stdin, stdout, stderr = ssh.exec_command("rsync...")
counter = 0
while True:
counter += 1
print stdout.readlines(), stderr.readlines(), counter
time.sleep(3)
答案 0 :(得分:0)
您应该使用readlines()
逐步读取输出,而不是使用read([bytes])
。 readlines()
读取所有行直到EOF(这就是你看到阻止的原因),然后在\n
字符上分成行。
相反,做这样的事情:
while True:
counter += 1
print(stdout.read(2048), stderr.read(2048), counter)
time.sleep(3)
注意:这不会终止循环,如果stdout和stderr的输出长度为零,您可能需要考虑终止循环。