2011-08-08 11 views
6

मैं एक स्थान से दूसरे स्थान पर फ़ाइलों की प्रतिलिपि बनाने के लिए shutil.copy का उपयोग कर रहा हूं। यदि गंतव्य स्थान में एक ही नाम वाली फ़ाइल पहले से मौजूद है, तो यह सामान्य रूप से ठीक है और ओवरराइट होती है। हालांकि, यदि गंतव्य केवल पढ़ने के लिए है, तो यह अनुमति को अस्वीकार कर देता है त्रुटि से इनकार कर दिया।shutil.copy विफलता जब गंतव्य पहले से मौजूद है और केवल पढ़ने के लिए

इससे निपटने का सबसे शानदार तरीका क्या है? क्या कोई और शटल फ़ंक्शन है जो अनुमतियों के मुद्दे से निपटेंगे, या मुझे प्रतिलिपि की गई फ़ाइल पर अनुमतियों की जांच करनी चाहिए?

+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> 
संबंधित मुद्दे