【发布时间】:2014-03-09 00:05:30
【问题描述】:
我有一组系统测试,它们会启动一些进程、创建文件等,然后将它们全部关闭并删除文件。
我在清理时遇到两个间歇性错误:
在由其中一个进程创建的日志文件上:
os.remove(log_path)
WindowsError: [Error 32] The process cannot access the file because it is being used by another process: <path_to_file>
尝试使用shutil.rmtree 删除输出目录时:
File "C:\Python27\lib\shutil.py", line 254, in rmtree
os.rmdir(path)
WindowsError: [Error 145] The directory is not empty: 'C:\\TestTarget\\xxx'
如果我在整理之前插入 2 秒延迟,这两个错误都会消失,所以我认为问题在于 Windows 释放文件所需的时间。显然我想避免延迟测试,有没有办法等到文件系统赶上?
【问题讨论】:
-
你可以在一个循环中插入一个
try块并循环直到它成功......这行得通吗? -
这是一个合理的权宜之计,谢谢。如果有的话,我想要一个更清洁的解决方案。
-
我认为只要进程在关闭时正确关闭文件,应该可以立即删除。您可能会寻找问题的真正原因。 :-)
-
我也遇到过类似的问题。我认为这要么是防病毒软件的问题,要么是 NTFS 中的错误。根据我的经验,它通常会很快解决,因此最简单的解决方法是检测故障,短暂延迟(可能 10 毫秒),然后循环重试。
-
这里有同样的问题。我正在删除一个目录 shutil.rmtree(),然后使用 os.rename() 将另一个目录重命名为相同的目录,并收到错误“当该文件已存在时无法创建文件”。在我看来有点荒谬,我正在尝试使用 python 作为跨平台的 shell/batch 替换,而且我绝对从未在 shell 或批处理脚本中看到过这种类型的问题。