帕拉米科& rsync - 在命令运行时异步获取进度

时间:2016-08-09 14:05:08

标签: python rsync paramiko

我正在使用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)

1 个答案:

答案 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的输出长度为零,您可能需要考虑终止循环。