使用Python知道何时从FTP源完全接收文件

时间:2013-08-29 00:32:07

标签: python ftp

我正在使用Python开发一个执行以下操作的应用程序:

  • 监视特定目录并监视文件 转移到它。文件完成传输后,运行一些 文件上的外部程序。

我开发此应用程序的主要问题是知道文件何时完成传输。据我所知,该文件将通过SFTP传输到特定目录。 Python如何知道文件何时完成传输?我知道我可以使用st_size方法返回的对象中的os.stat(fileName)属性。我需要使用更多工具来实现这些目标吗?

2 个答案:

答案 0 :(得分:6)

我最终使用了看门狗的组合并等到我可以打开文件进行编写

 #If there is no error when trying to read the file, then it has completely loaded
    try:
        with io.FileIO(fileName, "r+") as fileObj:

            '''
            Deal with case where FTP client uses extensions such as ".part" and '.filepart" for part of the incomplete downloaded file.
            To do this, make sure file exists before adding it to list of completedFiles.
            '''
            if(os.path.isfile(fileName)):
                completedFiles.append(fileName)
                print "File=" + fileName + " has completely loaded."
    except IOError as ioe:
        print str(ioe)

答案 1 :(得分:4)

解决此问题的最佳方法是将发送过程SFTP发送到保留区域,然后(可能使用SSH)执行mv命令将文件从保留区域移动到最终目标区域。然后,一旦文件出现在目标区域中,您的脚本就会知道它已完全转移。