2010-05-17 115 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行的注释)。

相关问题