2010-05-17 93 views
1

我正試圖自動化下載過程。在此我想知道,特定文件的保存是否完成。情景就是這樣。如何使用Python檢查文件保存是否完成?

  1. 公開使用或者Chrome或Firefox(任何瀏覽器)站點地址
  2. 保存的頁面使用「鍵Crtl + S」盤(我工作在Windows上)
  3. 現在,如果頁面是非常大的,那麼需要幾秒鐘來保存。一旦保存完成,我想解析html。

由於我沒有控制瀏覽器保存功能,我不知道保存是否已完成。

我認爲的一個想法是使用while循環獲取文件的md5sum,並檢查前一個計算出來的結果,並繼續while循環,直到前一個和當前一個的md5總和相匹配。這不起作用我猜想,因爲它似乎瀏覽器第一次嘗試將文件保存在一個tmp文件,然後將內容複製到指定的文件(或只是重命名文件)。

任何想法?我使用python進行自動化,因此任何可以使用python實現的想法都是受歡迎的。

感謝 Indrajith

+1

爲什麼不用python下載?它會給你完全的控制 – Mark 2010-05-17 09:50:01

回答

6

在Windows上,你可以嘗試以獨佔訪問模式打開文件,以檢查它是否正在使用(讀或寫)通過一些其它方案。我用這個等待完整的FTP上傳服務器端,下面的代碼:

def check_file_ready(self, path): 
    '''Check if file is not opened by another process.''' 
    handle = None 
    try: 
     handle = win32file.CreateFile(
      path, 
      win32file.GENERIC_WRITE, 
      0, 
      None, 
      win32file.OPEN_EXISTING, 
      win32file.FILE_ATTRIBUTE_NORMAL, 
      None) 
     return True 
    except pywintypes.error, e: 
     if e[0] == winerror.ERROR_SHARING_VIOLATION: 
      # Note: other possible error codes include 
      # winerror.ERROR_FILE_NOT_FOUND 
      # winerror.ERROR_PATH_NOT_FOUND 
      # winerror.ERROR_ACCESS_DENIED. 
      return False 
     raise 
    finally: 
     if handle: 
      win32file.CloseHandle(handle) 

注:此功能重新引發除了共享衝突所有的Win32錯誤。您應該檢查文件是否存在,或檢查函數中的其他錯誤代碼(請參閱第15行的註釋)。