这个
WinError 5
不幸的是,这个消息非常通用,所以有很多不同的答案,更不幸的是我认为大多数(比如以管理员身份运行的建议)通常都是不相关的。你
不应该
需要以管理员身份运行才能读取、写入或替换您拥有的文件。
那怎么回事?当然,有多种可能的原因,但需要考虑的一个值得注意的原因是,该文件已在另一个进程中打开,因此无法替换。以下是一个快速演示:
PS> python3.8.exe
Python 3.8.10 (tags/v3.8.10:3d8993a, May 3 2021, 11:48:03) [MSC v.1928 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> import tempfile
>>> dest=tempfile.NamedTemporaryFile(suffix="-dest", delete=False).name
>>> os.replace(tempfile.NamedTemporaryFile(suffix="-tmp", delete=False).name, dest)
>>> f = open(dest)
>>> os.replace(tempfile.NamedTemporaryFile(suffix="-tmp", delete=False).name, dest)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
PermissionError: [WinError 5] Access is denied: 'tmpuau8nzjn-tmp' -> 'tmpq3lqearn-dest'
我们打了一个
WinError 5
在打开(并保持打开)目标文件的句柄之后。与支持并发写入的Linux不同(句柄继续指向旧文件)
Windows does not allow this by default
.
我
相信
这个
FileShare
enum
可以被开启器用来允许并发写入,但我不确定如何正确地将这个API与Python一起使用。