在Python中运行shutil.rmtree(d)后,权限被拒绝执行os.mkdir(d)

时间:2013-05-04 11:26:32

标签: python io shutil

在Windows 7控制台中经常运行python程序两次非常快

if os.path.isdir(d):
    shutil.rmtree(d)
if not os.path.exists(d):
    os.mkdir(d)

其中d是包含许多文件的目录的名称,我得到mkdir命令的“权限被拒绝”。但是,如果我跑一次,然后等待几秒钟,然后再次运行我没有得到这样的错误。 这有什么问题?

1 个答案:

答案 0 :(得分:8)

有三件事情会浮现在脑海中:

  1. Windows本身会延迟某些文件操作以保留元数据。例如,如果您重命名文件并在其位置创建另一个文件,则Windows会有一个时间窗口,其中ACL之类的内容将传输到新文件。这是一个“功能”,即使对于在删除旧文件之前编写新文件的程序,也可以保留此元数据,以便在中间出现故障时不会丢失数据。

  2. 恶意软件扫描程序有时会挂钩到文件系统操作并对文件执行扫描,搜索恶意软件(或政府批评文本,如果你是偏执狂,甚至可能不是偏执狂)。在该扫描期间,阻止对该文件的一些其他访问。

  3. 最后,我不确定如何实现shutil.rmtree(),但在Windows下,某些树操作实际上不是由操作系统核心实现的,而是由shell(即资源管理器)实现的,它们可以被执行异步,这将解释一个短时间窗口,即使呼叫已经返回,路径仍然被阻止。

  4. 我相信,例如颠覆或者更确切地说Apache Portable Runtime偶然发现了同样的问题并通过简单地重试延迟来解决它。这个解决方案并没有赢得选美比赛,但似乎是做了工作(tm)。

相关问题