我试图通过Python的shutil复制文件。从Python解释器开始,从Powershell开始执行:
>>> shutil.copy("C:\\Program Files\\1C\\AgentQMC\\1.0.10.2\\file.lock", "C:\\file.lock")
(file.lock
是一个由服务创建的文件,当前正在运行)但是它给了我一个错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Development\Python\Python36\lib\shutil.py", line 257, in copy2
copyfile(src, dst, follow_symlinks=follow_symlinks)
File "C:\Development\Python\Python36\lib\shutil.py", line 122, in copyfile
copyfileobj(fsrc, fdst)
File "C:\Development\Python\Python36\lib\shutil.py", line 79, in copyfileobj
buf = fsrc.read(length)
PermissionError: [Errno 13] Permission denied
我确信我拥有所有必要的权限,因为如果我退出Python解释器并尝试通过Powershell复制文件,它就可以工作。
答案 0 :(得分:0)
神秘解决了。在查看程序源(创建此文件)之后,我发现该程序在第101个字节上设置了独占锁(idk为什么),而实际文件长度较少(4-5个字节,取决于PID值) 。当我尝试通过Powershell复制此文件时,它ReadFile
前4个字节(实际文件长度),将它们写入目标文件并完成复制成功,因为它永远不会到达锁定区域(第101个字节)。 Python由于某种原因忽略了值,我传递给.read()
方法并读取至少8192个字节(我假设这是一些系统常量)(但如果我传递的值x
超过8192,它会读取完全x
字节)。当Python尝试从该文件中读取8192个字节时,它显然会到达锁定区域并失败。
答案 1 :(得分:0)
我也发生了此错误。 经过一些测试,似乎onedrive创建了文件,并且不允许脚本访问。 这是一个特定的问题,但我想我会分享,因为这是要记住的事情!