我计划使用 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 。
我是一名优秀的程序员,十分优秀!