我有一个Python测试套件,可以创建和删除许多临时文件.在Windows 7下,shutil.rmtree操作有时会失败(<1%的时间).失败显然是随机的,并不总是在相同的文件上,并不总是以相同的方式,但它总是在rmtree操作上.这似乎是某种时间问题.它也让人联想到Windows 7对权限和管理员权限的警惕性增强,但这里没有权限问题(因为代码刚刚创建了文件),并且没有管理员权限.
它看起来像两个线程或进程之间的计时问题,但这里也没有并发性.
(部分)堆栈跟踪的两个示例:
File "C:\ned\coverage\trunk\test\test_farm.py", line 298, in clean
shutil.rmtree(cleandir)
File "c:\python23\lib\shutil.py", line 142, in rmtree
raise exc[0], (exc[1][0], exc[1][1] + ' removing '+arg)
WindowsError: [Errno 5] Access is denied removing xml_1
File "C:\ned\coverage\trunk\test\test_farm.py", line 298, in clean
shutil.rmtree(cleandir)
File "c:\python23\lib\shutil.py", line 142, in rmtree
raise exc[0], (exc[1][0], exc[1][1] + ' removing '+arg)
WindowsError: [Errno 3] The system cannot find the path specified removing out
Run Code Online (Sandbox Code Playgroud)
在Windows XP上,它永远不会失败.在Windows 7上,它在这几个不同的Python版本(2.3-2.6,不确定3.1)中失败了.
有人见过这样的东西并有解决方案吗?代码本身就是bitbucket,真正的勤奋.
这是一个很长的镜头,但你运行的是在后台扫描目录的东西吗?我在想防病毒/备份(也许Windows 7有内置的东西?我不知道).从TortoiseSVN启动的TSVNCache.exe进程中删除/移动文件时,我偶尔会遇到一些故障 - 似乎它会查看目录中的更改,然后可能会打开它们来扫描文件.