|
项目中的一个情景是这样:有一个路径,不定时的有文件从其他渠道被转移进来,可能是人手经过smb从windows copy过来,也可能是机器wget下来
写了个python的脚本,由cron去定时调用,判断路径下有没有特定的文件需要处理,有的话做一系列的文件操作,详情略
现在遇到的情况是这样,拷贝进来的文件可能会比较大,可能脚本进行扫描目录的时候文件还没下载完成,这个时候被操作的话会造成文件损坏;
我无法控制在拷贝完成之前用临时文件名(例如像迅雷那样把未完成文件后缀临时改为.incompleted,等下载完毕再改名为原名);
目前想到的做法是遇到需要处理的文件,我先间隔若干秒判断文件尺寸有没有在不断的变化,如果停止变化了则认为是一个下载完毕的文件;
思路大概类似下面(代码语法可能不是很严谨,新手见谅)
- curFileSize = os.path.getsize(path)
- lastFileSize = -1 #初始化
- while curFileSzie != lastFileSize:
- lastFileSize = curFileSize
- time.sleep(5) #等5秒
- curFileSize = os.path.getsize(path)
- #文件不再变化
- #...业务脚本..
复制代码 有没有更优雅可靠的方式解决这个问题呢?
由于在极端情况下(网络或文件IO堵塞)这个等待的延时之后文件大小可能没有变化,但实际上拷贝并未完成。
请各路大神不啬赐教
|
|