当目标已存在且为只读时,shutil.copy失败

7 投票
2 回答
12802 浏览
提问于 2025-04-16 23:08

我正在使用shutil.copy这个工具来把文件从一个地方复制到另一个地方。如果目标位置已经有一个同名的文件,通常没问题,会直接覆盖掉。不过,如果目标位置是只读的,就会出现权限拒绝的错误。

那么,有什么好的办法来解决这个问题呢?有没有其他的shutil函数可以处理权限问题,还是说我必须在每次复制文件之前都检查一下权限呢?

2 个回答

1

你不需要自己去检查权限问题。让操作系统来告诉你哪里有权限问题,然后再去处理它。我假设你遇到的错误是PermissionDeniedError,所以你的解决方案大概是这样的。

try:
  shutil.copy(blah,blah,blah)
except PermissionDeniedError:
  <Code for whatever you want to do if there arent sufficient permissions>
4

像这样

import os
import shutil

def my_super_copy(what, where):
    try:
        shutil.copy(what, where)
    except IOError:
        os.chmod(where, 777) #?? still can raise exception
        shutil.copy(what, where)

撰写回答