很多时候,在Windows 7控制台,如果我两次非常快,做运行Python程序
if os.path.isdir(d):
shutil.rmtree(d)
if not os.path.exists(d):
os.mkdir(d)
其中d
与许多文件的目录名,我得到一个“Permission denied”为mkdir
命令。 但是,如果我跑一次,然后等待几秒钟,然后再次运行我没有得到这样的错误。 这里有什么问题?
很多时候,在Windows 7控制台,如果我两次非常快,做运行Python程序
if os.path.isdir(d):
shutil.rmtree(d)
if not os.path.exists(d):
os.mkdir(d)
其中d
与许多文件的目录名,我得到一个“Permission denied”为mkdir
命令。 但是,如果我跑一次,然后等待几秒钟,然后再次运行我没有得到这样的错误。 这里有什么问题?
有三件事情浮现在脑海中:
Windows本身为了保存元数据延迟一些文件操作。 例如,在您重命名文件,并在其位置创建一个又一个,Windows有一个时间窗口,之类的东西的ACL被转移到新的文件。 这是一个“功能”来保存元数据即使对于删除旧之前写入新文件的程序,以当事情在中间失败不松动的数据。
恶意软件扫描程序有时挂接到文件系统操作和文件进行扫描,寻找恶意软件(或政府批评的文本,如果你是偏执狂,也许即使你不是偏执)。 在此期间,扫描,其他一些访问该文件被封锁。
最后,我不知道如何shutil.rmtree()
来实现,但在Windows下,一些树的操作实际上不是由OS核心,但由shell执行(即浏览器),他们可以异步执行,这将解释很短的时间窗口,在其中的路径仍然是阻塞,即使已经回了电话。
我认为,如颠覆或者说Apache可移植运行时偶然发现了同样的问题,并围绕它的工作通过简单地用重试延迟。 这个解决方案没有赢得选美比赛,但似乎做的工作(TM)。