gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 17:48:38 25 4
gpt4 key购买 nike

在 Windows 7 控制台中,如果我非常快速地运行 python 程序两次,通常会这样

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

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

最佳答案

我想到了三件事:

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

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

  3. 最后,我不确定 shutil.rmtree() 是如何实现的,但是在 Windows 下,一些树操作实际上不是由 OS 核心实现的,而是由 shell(即Explorer)并且它们可以异步执行,这将解释一个短时间窗口,在该窗口中路径仍然被阻塞,即使调用已经返回。

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

关于python - 在 Python 中运行 shutil.rmtree(d) 后权限被拒绝执行 os.mkdir(d),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16373747/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com