Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python了解何时完全从FTP源接收到文件_Python_Ftp - Fatal编程技术网

使用Python了解何时完全从FTP源接收到文件

使用Python了解何时完全从FTP源接收到文件,python,ftp,Python,Ftp,我正在使用Python开发一个执行以下操作的应用程序: 监视特定目录并监视要删除的文件 转移到它。文件传输完成后,运行一些 文件上的外部程序 我开发这个应用程序的主要问题是知道文件何时完成传输。据我所知,该文件将通过SFTP传输到特定目录。Python如何知道文件何时完成传输?我知道我可以使用os.stat(fileName)方法返回的对象中的st_size属性。我需要使用更多的工具来实现这些目标吗?解决这一问题的最佳方法是将发送进程SFTP发送到等待区域,然后(可能使用SSH)执行mv命令

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

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

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

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

我最终使用了一个监视器组合,并等待打开文件进行写入

 #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)

你知道最终的文件大小是多少吗?如果不是
st_size
也帮不了什么忙,那么你唯一能做的就是使用
lsof
,这是一个平台特定的库,它公开了
lsof
使用的功能,或特定于平台的文件系统观察程序库。请根据您可能也能够使用的平台查看。我不知道要传输的文件的大小,我刚刚验证了SFTP服务器是Windows计算机。因为我将使用Windows计算机,是否有任何Windows API调用可用于Python for Windows()以确定文件是否已完全传输。文件是否有特殊的EOF标记,表明它们是Windows可以验证的完整文件?