我有一组系统测试可以启动某些进程,创建文件等,然后关闭它们并删除文件。
我在清理时遇到两个间歇性错误:
在由其中一个进程创建的日志文件中:
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释放文件的时间。显然我想避免在我的测试中延迟,有没有办法等到文件系统赶上来?
答案 0 :(得分:0)
我有类似的问题,几个月以来我一直在寻找合适的解决方案,但没有找到。对我来说,问题仅是在使用python2.7的Windows上运行脚本时发生的。在python3上大多数时候都没有问题。在GNU / Linux上,我可以在没有这种肮脏解决方案的情况下使用文件操作。
我最终将此功能用于Windows的任何文件操作: try_fail_wait_repeat (请参见下文),您应该执行类似的操作。另外,您可以将睡眠设置为其他值。
with cte(id, description, val, before, after, n, cnt) as (
select id, description, val, before, after, 1 as n, regexp_count(description, ';')
from t
union all
select id, description, val, before, after, n + 1, cnt
from cte
where n <= cnt
)
select id,
regexp_substr(description, '[^;]+', 1, n) as description,
regexp_substr(val, '[^;]+', 1, n) as val,
regexp_substr(before, '[^;]+', 1, n) as before,
regexp_substr(after, '[^;]+', 1, n) as after
from cte;
答案 1 :(得分:-1)
尝试:
import shutil
shutil.rmtree('/folder_path')
此外,请在关闭过程之前尝试添加一个休眠间隔。