2012-12-21 30 views
2

我有一個腳本掃描目錄看的時候添加新的文件,然後處理它們的內容。它們是視頻文件,因此它們通常非常大,並且通過網絡傳輸,並且通常需要很長時間才能傳輸。所以我需要確保在繼續之前完成複製。的Python:檢查是否有新的文件,並等待,直到他們完成轉移

此刻,一旦我在目錄中找到一個新的文件,我使用os.path.mtime檢查修改日期和比較,爲最後時刻的文件進行掃描,以查看其是否仍在修改中。理論是,如果它不再被修改,那麼它應該轉移。

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

,但似乎並沒有工作 - 腳本被觸發太早,因爲該文件未完全加載處理失敗。難道是在掃描之間沒有足夠的停頓時間,mtime保持不變...?我在掃描之間給它10秒 - 當然這應該足夠了。

是否有這樣做的一個簡單/更Python的方式?這些文件位於VM上運行的Windows服務器上。

回答

0

你有過的文件的添加任何控制?如果是這樣,你可以創建一個像videoname-complete一旦影片上傳完畢,名稱的空文件,並觀看了這些文件。

+0

沒有。這是一個有很多用戶的投遞箱類型的東西。 – stib

1

你的支票是不是「我的修改時間比上次檢查時間大?」。

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

我不是一個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 
+0

不,如果修改時間大於上次檢查時間,那麼在此期間該文件發生了某些情況,並且它仍可能正在加載。找到新文件的作品,它只是找到新的文件已完成改變這就是問題。我已更新問題 – stib

+0

對不起,你是否正在檢查文件是否已完成上傳? – opensourcegeek

+0

是的,因此在標題中「等到他們完成轉移」。 – stib

相關問題