Python:检查新文件并等待它们完成传输

时间:2012-12-21 00:47:39

标签: python video filesystems windows-server-2008

我有一个脚本来扫描目录以查看添加新文件的时间,然后处理它们的内容。它们是视频文件,因此它们通常非常大,而且它们通过网络传输,并且通常需要很长时间才能传输。所以我需要确保他们在继续之前完成了复制。

目前,一旦我在目录中找到了一个新文件,我正在使用os.path.mtime检查修改日期,并将其与上次扫描文件进行比较,看看是否是仍在修改中。该理论认为,如果它不再被修改,那么它就应该进行转移。

if getmtime(path.join(self.rootFolder, thefile)) < self.lastchecktime: newfiles.append[thefile]

但这似乎不起作用 - 脚本过早触发,处理失败,因为文件没有完全加载。可能是扫描之间没有足够的暂停,mtime保持不变......?我在扫描之间给它10秒 - 这肯定是足够的。

这样做有简单/更加pythonic的方法吗?这些文件位于VM上运行的Windows服务器上。

2 个答案:

答案 0 :(得分:1)

您的支票不会是“我的修改时间是否大于上次检查?”。

if os.path.getmtime(path) > self.lastAccessedTime: 
    # do something as modified time is greater than last time I checked
    pass 

我不是一个Windows家伙,但我确信会有一些等效的库来为windows inotify。在文件系统级别上监听文件或目录更改是一种非常好的方法。我将留下一些使用pyinotify在linux上运行的示例代码,对linux上的某些人有帮助。

class PTmp(pyinotify.ProcessEvent):
    def process_IN_CLOSE_WRITE(self, event):
        print "Changed: %s " % os.path.join(event.path, event.name)


wm = pyinotify.WatchManager()
mask = pyinotify.IN_CLOSE_WRITE
notifier = pyinotify.Notifier(wm, PTmp())
wdd = wm.add_watch(FILE_LOCATION, mask, rec=True)

while True:
    try:
        notifier.process_events()
        if notifier.check_events():
            notifier.read_events()

    except KeyboardInterrupt:
        notifier.stop()
        break

答案 1 :(得分:0)

您是否可以控制添加文件?如果是这样,您可以在视频上传完成后创建一个名为videoname-complete的空文件,并观察这些文件。