2011-08-08 35 views
6

Dosyaları bir konumdan diğerine kopyalamak için shutil.copy kullanıyorum. Aynı ada sahip bir dosya hedef konumda zaten mevcutsa, normalde tamamdır ve üzerine yazar. Ancak, hedef salt okunursa, bir izin reddedildi hatası atar.Hedef zaten mevcut olduğunda ve salt okunur olduğunda shutil.copy hatası

Bununla baş etmenin en zarif yolu nedir? İzin konusuyla ilgilenecek başka bir kapatma işlevi var mı, yoksa kopyaladığım dosyadaki izinleri mi kontrol etmeliyim?

+1

gibi yetiremediğin Bunu nasıl işlev hatası başa beklenebilir? –

+0

İzinleri değiştirerek, sanırım. – coffee

+1

@coffee: Bunu yapmak için normal bir "kopya" yardımcı programı istemezdim. Birincisi: eğer bir dosyaya yazma iznim yok ise, bu izni değiştirme iznim yok ve ikincisi: * İzinimi değiştirmek için * iznim olsa bile, açık bir hareket (başka bir deyişle, dosyalardan birinden yazma izni kaldırırsam, dokunulmadan kalmasını istiyorum!). –

cevap

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

İzinleri denetlemeniz gerekmez. İşletim Sistemi size bir izin sorunu olduğunu söyleyin ve sonra bununla başa çıkın. PermissionDeniedError’ın istisna olduğunu varsayıyorum, çözümünüz böyle bir şey gibi görünüyordu.

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