通常在Windows 7控制台中,如果我快速运行两次python程序就可以了
if os.path.isdir(d):
shutil.rmtree(d)
if not os.path.exists(d):
os.mkdir(d)
Run Code Online (Sandbox Code Playgroud)
哪里d是包含许多文件的目录的名称,我得到mkdir命令的"权限被拒绝" .但是,如果我跑一次,然后等待几秒钟,然后再次运行我没有得到这样的错误.这里有什么问题?
Ulr*_*rdt 10
有三件事情会浮现在脑海中:
Windows本身会延迟一些文件操作以保留元数据.例如,如果您重命名文件并在其位置创建另一个文件,则Windows会有一个时间窗口,其中ACL之类的内容将传输到新文件.这是一个"功能",即使对于在删除旧文件之前编写新文件的程序,也可以保留此元数据,以便在中间出现故障时不会丢失数据.
恶意软件扫描程序有时会挂钩到文件系统操作并对文件执行扫描,搜索恶意软件(或政府批评文本,如果你是偏执狂,甚至可能不是偏执狂).在该扫描期间,阻止对该文件的一些其他访问.
最后,我不确定如何shutil.rmtree()实现,但在Windows下,一些树操作实际上不是由OS核心实现,而是由shell(即Explorer)实现,它们可以异步执行,这可以解释一个短时间窗口,其中即使呼叫已经返回,路径仍然被阻止.
我相信,例如Subversion或者更确切地说Apache Portable Runtime偶然发现了同样的问题并通过简单的重试延迟来解决它.这个解决方案没有赢得选美比赛,但似乎是做了工作(tm).
| 归档时间: |
|
| 查看次数: |
2608 次 |
| 最近记录: |