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

标签 python ftp ftplib

我计划使用 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/

相关文章:

python - 安装 plone 时不支持的哈希类型

python - 如何使用 Python ftplib 获取 FTP 文件的修改时间

python - ftplib.cwd 错误 : UnicodeEncodeError: 'latin-1' codec can't encode characters

Python :raise error_perm, 和 ftplib.error_perm : 500?

python - 使用 Python 和 LXML 从数据框创建 XML 文件

python - ValueError : Error when checking input: expected dense_151_input to have 3 dimensions, 但得到形状为 (2, 2100) 的数组

Python函数求等边三角形的一点

python - 在 Python 中连接到 FTP 服务器时出现 EOFError

ftp - 有没有办法将文件同步到未安装 rsync 的远程位置?

html - 使用 Dreamweaver 确保所有网站文件正确上传