从状态文件跟踪LFTP下载

2024-04-20 15:16:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我通过python子进程调用lftp命令,并在lftp命令中使用pget的-n标志来设置最大连接数。现在,当下载正在进行时,将创建一个名为filename.lftp pget status的状态文件,下载结束后将自动删除该文件

下面是connections = 4的状态文件的示例输出

$ cat abc_20200619.gz.lftp-pget-status 
size=1837873446
0.pos=459472896
0.limit=459468363
1.pos=1301863572
1.limit=1378405085
2.pos=1735117533
2.limit=1837873446

我需要从状态文件跟踪下载进度。我很难理解内容,因为下载结束时分区也会减少。我编写了下面的公式来计算下载的数据字节数,但我认为这不是正确的方法

bytes_downloaded = 0.pos + (1.pos-0.limit) + (2.pos-1.limit) + (n.pos-(n-1).limit)

有人知道跟踪状态文件中的lftp下载吗


Tags: 文件pos命令示例进程标志状态status
1条回答
网友
1楼 · 发布于 2024-04-20 15:16:48

如果将“POS”和“限制”值对作为{(Pᵢ, Lᵢ) | 0 ≤ i < n},其中Lₙ₋₁是完整的大小,我们可以将以下属性定义为:p>

剩余字节数可以表示为Σᵢ₌₀ⁿ⁻¹(Lᵢ - Pᵢ)。因此,下载的字节数可以表示为Lₙ₋₁ - (Σᵢ₌₀ⁿ⁻¹(Lᵢ - Pᵢ))。这个表达式可以通过多种方式进行操作,如(Σᵢ₌₀ⁿ⁻¹(Pᵢ - Lᵢ)) + Lₙ₋₁,但最有用的编程方式可能是(Σᵢ₌₀ⁿ⁻¹(Pᵢ)) - (Σᵢ₌₀ⁿ⁻²(Lᵢ))。示例算法如下所示:

FILE = open('example.lftp-pget-status', 'r') 
file_lines = FILE.readlines()
downloaded_bytes = 0

# first and last lines are removed and numbers extracted for other lines
file_lines = [int(re.sub(r'.*=', '', line)) for line in file_lines[1:-1]]

downloaded_bytes += sum(file_lines[0::2]) # values with even index (the pos)
downloaded_bytes -= sum(file_lines[1::2]) # values with odd index (the limit)

这个答案已经晚了,但希望对其他搜索者有所帮助

相关问题 更多 >