2010-06-07 64 views
0

在Linux中,如何在讀取文件之前知道文件是否已完成複製?在Windows中,引發了一個OSError。文件複製完成?

回答

1

可以使用inotify的機制(通過pyinotify)趕上像創建活動,寫,關閉,並根據他們,你可以假設羯羊拷貝已經完成與否。

但是,由於您沒有提供有關您要做什麼的詳細信息,因此我無法判斷inotify是否適合您(btw,inotify是Linux特有的,因此您無法在Windows或其他平臺上使用它)

+0

請注意,pyinotify的主頁現在是http://trac.dbzteam.org/pyinotify而不是SourceForge頁面。無論如何,偉大的回答,我不知道這個模塊! – 2010-06-07 12:41:14

+0

它的工作......謝謝。 – asdfg 2010-06-07 12:55:42

1

在Linux中,您可以在另一個進程正在寫入文件時打開文件,而不需要Python拋出OSError,因此通常無法確定對方是否已完成寫入該文件。您可以嘗試一些黑客,但:

  1. 您可以定期檢查文件大小,看它是否增加了自上次檢查。如果它沒有增加例如五秒鐘,那麼可能是可以安全地假定副本已經完成。我想說可能是,因爲在任何情況下都不是這樣。如果寫入文件的其他進程因任何原因被阻塞,則可能會暫時停止寫入文件並稍後恢復。因此,這不是100%的傻瓜,但如果系統永遠不會承受沉重的寫入過程,那麼它可能適用於本地文件副本。

  2. 您可以檢查fuser(這是一個shell命令)的輸出,該輸出將列出持有給定文件名的文件句柄的所有文件的進程ID。如果此列表包含除您以外的任何進程,則可以假定複製過程尚未完成。但是,您必須確保在目標系統上安裝了fuser以使其正常工作。

+0

我正在使用輪詢方法。我想知道是否有更好的方法...... – asdfg 2010-06-07 12:43:34