gpt4 book ai didi

python - 当使用 ftplib 监视 FTP 服务器上的新文件时,有没有办法查看新文件是否仍在传输?

转载 作者:太空宇宙 更新时间:2023-11-03 16:57:10 25 4
gpt4 key购买 nike

我计划使用 ftplib 来监视服务器上的新文件。有没有办法查看新文件是否仍在传输?

这是查找新文件的部分解决方案:

Monitor remote FTP directory

from ftplib import FTP
from time import sleep

ftp = FTP('localhost')
ftp.login()

def changemon(dir='./'):
ls_prev = set()

while True:
ls = set(ftp.nlst(dir))

add, rem = ls-ls_prev, ls_prev-ls
if add or rem: yield add, rem

ls_prev = ls
sleep(5)

for add, rem in changemon():
print('\n'.join('+ %s' % i for i in add))
print('\n'.join('- %s' % i for i in remove))

ftp.quit()

最佳答案

我假设您想知道是否可以确定文件是否正在通过不同 FTP 连接传输。一般来说,这是不可能的,因为没有 FTP 命令来询问是否有文件传输正在进行。

您可以依靠通过 FTP.size 轮询非标准 SIZE 命令的启发式方法。查看文件的大小是否随着时间的推移而增长,然后假设如果它在一段时间内保持相同的大小,则该文件没有在进行中。

请注意,这种启发式方法可能会导致您检测到文件未在进行中,即使它仍在进行中,因此您需要确保您可以接受潜在的问题处理部分截断的文件。

请记住,FTP 连接有时会断开并在稍后的某个时间点恢复,因此如果发生这种情况,您可能必须依靠非常大的时间尺度来检测文件何时完成,除非您确切知道文件有多大该文件预计为。

如果您可以控制您的客户端,您可以要求您的客户端在文件上传旁边放置一些其他图元文件,告诉您正在监视的文件的预期大小,然后您就可以确定文件何时完成只需检查文件大小即可上传。同样,您可以使用 MD5 或其他外部文件有效性检查。另一种方法可以依赖于文件本身的 self 描述并包括内部完整性检查或文件长度。许多标准文件格式都包含这样的 header 。

关于python - 当使用 ftplib 监视 FTP 服务器上的新文件时,有没有办法查看新文件是否仍在传输?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35327789/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com