Python 监控Rsync进程

Python 监控Rsync进程,python,progress,rsync,Python,Progress,Rsync,我正在尝试编写一个Python脚本,它将监视rsync传输,并提供(粗略)的进度百分比估计。在我的第一次尝试中,我查看了一个rsync--progress命令,看到它打印了如下消息: 1614 100% 1.54MB/s 0:00:00 (xfer#5, to-check=4/10) 1614 100%1.54MB/s 0:00:00(xfer#5,待检查=4/10) 我为这样的消息编写了一个解析器,并使用检查部分来生成百分比进度,在这里,这将是60%的完成 然而,这其中有两个缺陷:

我正在尝试编写一个Python脚本,它将监视rsync传输,并提供(粗略)的进度百分比估计。在我的第一次尝试中,我查看了一个
rsync--progress
命令,看到它打印了如下消息:

1614 100% 1.54MB/s 0:00:00 (xfer#5, to-check=4/10) 1614 100%1.54MB/s 0:00:00(xfer#5,待检查=4/10) 我为这样的消息编写了一个解析器,并使用检查部分来生成百分比进度,在这里,这将是60%的完成

然而,这其中有两个缺陷:

  • 在大型传输中,to-check分数的“分子”似乎不是单调递减的,因此完整性百分比可以向后跳
  • 并非所有文件都打印这样的消息,这意味着进度可以向前跳跃
我已经看过了其他可供选择的消息,但没有找到任何东西。有人有什么想法吗


提前谢谢

要完全控制传输,您应该使用更低级的diff工具,自己管理目录列表和数据传输


基于librsync,有命令行或python模块

当前版本的rsync(在编辑3.1.2时)有一个选项
--info=progress2
,它将显示整个传输的进度,而不是单个文件

发件人:

还有一个--info=progress2选项,它基于整个传输而不是单个文件输出统计信息。在不输出文件名的情况下使用此标志(例如,如果希望在不滚动大量名称的屏幕的情况下查看传输情况,请避免-v或指定--info=name0。(使用--info=progress2不需要指定--progress选项。)


因此,如果可能,您可以在系统上将rsync升级到包含该选项的当前版本。

您可以使用参数
--no inc recursive
禁用增量递归。rsync将对整个目录结构进行预扫描,以便它知道必须检查的文件总数


这实际上是递归的老方法。当前默认的增量递归是为了提高速度而添加的。

注意这里的警告,即使是
--info=progress2
也不完全可靠,因为这是基于rsync在显示进度时知道的文件数的百分比。这是不一定是需要同步的文件总数(例如,如果它在深度嵌套的目录中发现大量大型文件)


确保
--info=progress2
不会在进度指示中跳回的一种方法是强制rsync在开始同步之前递归扫描所有目录(而不是执行增量递归扫描的默认行为),还提供了
--no inc recursive
选项。但是,请注意,此选项还将增加rsync内存使用率和运行时间。

值会跳变,因为rsync仍在评估其必须执行的工作时开始传输数据。这是一个很好的度量方法。是否无法让它对其所做的工作进行预评估需要做什么?--试运行--统计数据似乎是这样做的,不幸的是,它为要传输的数据生成的值不正确。为什么要放慢速度,只是为了让它显示无用的信息?嗯,这不是无用的信息……我一次传输千兆字节,给用户一个有用的想法很重要如果不打印左侧、右侧和中间的消息,则需要额外一分钟左右的时间才能向用户显示大概需要多长时间,这对我来说似乎是一个合理的权衡。没有“打印左侧、右侧和中间的消息”它只是在了解更多信息时更新进度信息。如果我只能在MinGW上编译rsync:/这对我来说非常有用,感谢您对选项的解释