【发布时间】:2011-02-09 00:34:10
【问题描述】:
在 Python 中,当在包含只读文件的文件夹上运行 shutil.rmtree 时,会打印以下异常:
File "C:\Python26\lib\shutil.py", line 216, in rmtree
rmtree(fullname, ignore_errors, onerror)
File "C:\Python26\lib\shutil.py", line 216, in rmtree
rmtree(fullname, ignore_errors, onerror)
File "C:\Python26\lib\shutil.py", line 216, in rmtree
rmtree(fullname, ignore_errors, onerror)
File "C:\Python26\lib\shutil.py", line 216, in rmtree
rmtree(fullname, ignore_errors, onerror)
File "C:\Python26\lib\shutil.py", line 216, in rmtree
rmtree(fullname, ignore_errors, onerror)
File "C:\Python26\lib\shutil.py", line 216, in rmtree
rmtree(fullname, ignore_errors, onerror)
File "C:\Python26\lib\shutil.py", line 216, in rmtree
rmtree(fullname, ignore_errors, onerror)
File "C:\Python26\lib\shutil.py", line 221, in rmtree
onerror(os.remove, fullname, sys.exc_info())
File "C:\Python26\lib\shutil.py", line 219, in rmtree
os.remove(fullname)
WindowsError: [Error 5] Access is denied: 'build\\tcl\\tcl8.5\\msgs\\af.msg'
查看文件属性对话框,我注意到af.msg 文件设置为只读。
所以问题是:解决此问题的最简单 解决方法/修复方法是什么 - 考虑到我的意图是在 Windows 上做与 rm -rf build/ 等效的操作? (无需使用 unxutils 或 cygwin 等第三方工具 - 因为此代码旨在在安装了 Python 2.6 w/ PyWin32 的裸 Windows 安装上运行)
【问题讨论】:
-
shutil.rmtree使用os.remove删除文件。os.remove删除只读文件就好了(至少在 Unix 上)。os.remove无法在 Windows 上删除正在使用的文件。 -
根据我的经验,如果目录打开并且您运行代码并且与删除过程有关,而不是创建步骤,可能会出现此错误。
标签: python windows file-permissions shutil