等待在Python中完成Windows文件I / O.

时间:2014-02-11 09:29:26

标签: python windows

我有一组系统测试可以启动某些进程,创建文件等,然后关闭它们并删除文件。

我在清理时遇到两个间歇性错误:

在由其中一个进程创建的日志文件中:

    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释放文件的时间。显然我想避免在我的测试中延迟,有没有办法等到文件系统赶上来?

2 个答案:

答案 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')

此外,请在关闭过程之前尝试添加一个休眠间隔。