2014-02-10 26 views
1

(Python 3)Python,在目錄中處理文件是否安全?

我有一個將入站文件放入目錄(不是用Python編寫)的過程。

一個獨立的Python應用程序定期處理目錄中的所有文件如下:

def getfilestobeprocessed(path): 
    filestobeprocessed = [] 
    for dirpath, dirnames, filenames in os.walk(path): 
     for filename in filenames: 
      filestobeprocessed.append({ "filename": filename, "dirpath": dirpath }) 
    return filestobeprocessed 

我擔心的是,如果有什麼入站過程是通過寫一個大文件的一半。我的Python腳本會做什麼?它是否會開始處理文件,而實際上它只應處理已由入站處理器寫入的文件?在處理它們之前,我應該試圖檢測文件是否打開?

我會使用pyinotify中,除了這傢伙批評它http://www.serpentine.com/blog/2008/01/04/why-you-should-not-use-pyinotify/

回答

2

當您打開(或重命名,刪除,...)文件作爲處理它的一部分時,您將得到一個「正在使用的文件」錯誤。在Windows上,它是代碼32.如果當你看到這個錯誤時,就不要處理那個文件 - 它會在下一次被處理的時候處理。

1

使用鎖文件已經考慮。

所以。當它複製時使用filename.lock,然後在完成複製後將其重命名爲正確的擴展名。

然後把一個if語句像

def getfilestobeprocessed(path): 
    filestobeprocessed = [] 
    for dirpath, dirnames, filenames in os.walk(path): 
     for filename in filenames: 
      if !filename.endswith(.lock): 
       filestobeprocessed.append({ "filename": filename, "dirpath": dirpath }) 
    return filestobeprocessed 
+0

不幸的是,我無法控制入站處理器 - 它只是將文件放入目標目錄。 –

相關問題