2010-09-25 92 views
0

的Python 2.6Python来检查文件的状态被上传

我的脚本需要监控上的FTP,当过它的改变/修改某些1G的文件,该脚本将其下载到另一个地方。这些文件名将保持不变,人们将首先删除ftp上的原始文件,然后上传新版本。我的脚本将检查文件大小和日期修改的文件元数据,以查看是否有区别。

问题是当脚本检查元数据时,新文件可能仍在上传。如何处理这种情况?是否有任何文件属性指示上传状态(如文件被锁定)?谢谢。

回答

2

没有这样的属性。您可能无法获取此类文件,但这取决于服务器软件。此外,文件访问标志可以在上传文件时设置一种方式,然后在上传完成时更改;或不完整的文件可能已经修改了名称(例如original_filename.ext.part) - 这一切都取决于用于上传的服务器端软件。

如果您控制服务器,请创建自己的元数据,例如上传完成后,在新上传的文件旁边创建一个空标志文件。

在一般情况下,恐怕最好的办法是监视文件大小,如果文件大小暂时没有变化,则认为文件完全上传。使此间隔足够大(以分钟为单位)。

2

您的问题留下了一些细节,但我会尽力回答。

  • 如果你在同一台服务器上运行的状态检查 这就是程序运行 FTP:

1)根据您的操作系统上,如果你使用Linux,你已经建立inotify到您的内核中,您可以使用pyinotify来观看您的上传目录 - inotify区别于打开,修改,关闭事件,并允许您异步观看文件系统事件,因此您不会持续投票。 OSX和Windows都有相似但实施不同的设施。

2)您可以通过pythonically tail -f来查看在服务器上放置新文件的时间(如果您甚至记录了这些文件),并在您看到相关更新消息时进行更新。

  • 如果你运行的程序远程

3)如果你的状态检查工具能够从FTP服务器的远程主机上运行,​​你必须轮询状态的文件,建立一些逻辑来检测尺寸变化。你可以使用FTP的'SIZE'命令来创建一个易于解析的字符串。

你不得不放入一些逻辑,这样如果文件大小变小,你会认为它被替换,然后等待它变大,直到它停止增长并在一段时间内保持相同大小。如果压缩档案的方式可以验证总和,那么可以将其下载校验和,然后重新上传到远程站点。

+0

感谢您的详细解答。我的程序运行在远程服务器上,一切都在Windows平台下。 – Stan 2010-09-29 04:18:05