2011-08-08 26 views
6

shutil.copyを使用してある場所から別の場所にファイルをコピーしています。同じ名前のファイルが宛先の場所にすでに存在する場合、通常はOKで上書きされます。ただし、宛先が読み取り専用の場合、アクセス権拒否エラーがスローされます。宛先がすでに存在し、読み取り専用の場合はshutil.copyが失敗する

これに対処する最もエレガントな方法は何ですか?アクセス許可の問題を処理する別のシャットダウン機能がありますか、それとも私がコピーしたファイルのアクセス許可をチェックする必要がありますか?

+1

のようななめらか? –

+0

権限を変更することで、私は推測します。 – coffee

+1

@コーヒー:これを行うには通常の「コピー」ユーティリティは欲しくないと思います。最初に:ファイルに書き込む権限がない場合、その権限を変更する権限がありません.2番目:権限を変更する権限を持っていても、明示的な行為(言い換えれば、私のファイルの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

権限を確認する必要はありません。 OSに許可の問題があると伝えさせ、それに対処します。私はPermissionDeniedErrorがあなたが得ている例外だと仮定していますので、あなたのソリューションはこのようになります。

try: 
    shutil.copy(blah,blah,blah) 
except PermissionDeniedError: 
    <Code for whatever you want to do if there arent sufficient permissions> 
関連する問題