2011-08-08 297 views
6

我正在使用shutil.copy将文件从一个位置复制到另一个位置。如果目标位置中已经存在具有相同名称的文件,通常可以覆盖。但是,如果目标是只读的,则会抛出权限被拒绝的错误。当目标已经存在并且是只读时,shutil.copy失败

什么是最优雅的方式来处理这个问题?是否有另一个shutil函数来处理权限问题,或者我必须检查我复制的文件的权限吗?

+1

不便你如何期望函数来处理这个错误吗? –

+0

通过修改权限,我想。 – coffee

+1

@coffee:我不想要一个普通的“复制”工具来做到这一点。首先:如果我没有写入文件的权限,那么很可能我没有权限更改该权限,其次:即使我有*权限来更改权限,我希望它是一个明确的行为(换句话说,如果我从我的一个文件中删除了写权限,那么我希望它保持不变!)。 –

回答

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) 
1

您不必检查权限。让操作系统告诉你有一个许可问题,然后处理它。我假设PermissionDeniedError是你得到的异常,所以你的解决方案看起来像这样。

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