2010-09-25 58 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