-->

被拒绝的权限在Python运行shutil.rmtree(d)之后做os.mkdir(d)(Perm

2019-09-01 23:26发布

很多时候,在Windows 7控制台,如果我两次非常快,做运行Python程序

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

其中d与许多文件的目录名,我得到一个“Permission denied”为mkdir命令。 但是,如果我跑一次,然后等待几秒钟,然后再次运行我没有得到这样的错误。 这里有什么问题?

Answer 1:

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

  1. Windows本身为了保存元数据延迟一些文件操作。 例如,在您重命名文件,并在其位置创建一个又一个,Windows有一个时间窗口,之类的东西的ACL被转移到新的文件。 这是一个“功能”来保存元数据即使对于删除旧之前写入新文件的程序,以当事情在中间失败不松动的数据。

  2. 恶意软件扫描程序有时挂接到文件系统操作和文件进行扫描,寻找恶意软件(或政府批评的文本,如果你是偏执狂,也许即使你不是偏执)。 在此期间,扫描,其他一些访问该文件被封锁。

  3. 最后,我不知道如何shutil.rmtree()来实现,但在Windows下,一些树的操作实际上不是由OS核心,但由shell执行(即浏览器),他们可以异步执行,这将解释很短的时间窗口,在其中的路径仍然是阻塞,即使已经回了电话。

我认为,如颠覆或者说Apache可移植运行时偶然发现了同样的问题,并围绕它的工作通过简单地用重试延迟。 这个解决方案没有赢得选美比赛,但似乎做的工作(TM)。



文章来源: Permission denied doing os.mkdir(d) after running shutil.rmtree(d) in Python
标签: python io shutil