2011-08-08 2 views
6

shutil.copy를 사용하여 한 위치에서 다른 위치로 파일을 복사합니다. 동일한 이름의 파일이 대상 위치에 이미 존재하면 정상적으로 덮어 쓰기됩니다. 그러나 대상이 읽기 전용이면 권한 거부 오류가 발생합니다.대상이 이미 있고 읽기 전용 인 경우 shutil.copy 실패

이 문제를 해결하는 가장 효과적인 방법은 무엇입니까? 사용 권한 문제를 다룰 다른 shutil 함수가 있습니까? 아니면 내가 복사 한 파일에 대한 사용 권한을 확인해야합니까?

+1

같은 떨어지게 어떻게 그 기능은 오류 처리 기대? –

+0

권한을 수정하여 가정합니다. – coffee

+1

@ 커피 : 나는 이것을하기위한 정상적인 "복사"유틸리티를 원하지 않을 것입니다. 첫 번째 : 파일에 쓸 수있는 권한이없는 경우 해당 권한을 변경할 수있는 권한이없고 둘째 : 권한을 변경할 수있는 권한이 있어도 그 권한을 변경할 수 있습니다. 명시 적 행위 (즉, 내 파일 중 하나에서 쓰기 권한을 제거하면 그대로 유지됩니다.). –

답변

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>