2009-02-11 17 views
7

विंडोज़ पर पायथन में, क्या यह निर्धारित करने का कोई तरीका है कि उपयोगकर्ता को निर्देशिका तक पहुंचने की अनुमति है या नहीं? मैंने os.access पर एक नज़र डाली है लेकिन यह झूठे परिणाम देता है।पायथन - परीक्षण निर्देशिका अनुमतियाँ

>>> os.access('C:\haveaccess', os.R_OK) 
False 
>>> os.access(r'C:\haveaccess', os.R_OK) 
True 
>>> os.access('C:\donthaveaccess', os.R_OK) 
False 
>>> os.access(r'C:\donthaveaccess', os.R_OK) 
True 

क्या मैं कुछ गलत कर रहा हूं? क्या किसी उपयोगकर्ता को निर्देशिका तक पहुंचने की अनुमति है या नहीं, यह जांचने का एक बेहतर तरीका है?

+1

पहली और तीसरी पहुंच विफल हो रही है क्योंकि \ h को एक (अमान्य) एस्केप अनुक्रम –

उत्तर

7

विंडोज़ में अनुमतियों की जांच करने के लिए जटिल हो सकता है (उदाहरण के लिए, यूएसी के साथ विस्टा में मुद्दों से सावधान रहें! - यह related question देखें)।

क्या आप साधारण पढ़ने के उपयोग के बारे में बात कर रहे हैं, यानी निर्देशिका की सामग्री पढ़ रहे हैं? परीक्षण अनुमतियों का निश्चित तरीका निर्देशिका तक पहुंचने का प्रयास करना होगा (उदा। os.listdir करें) और अपवाद पकड़ें।

इसके अलावा, पथों का सही ढंग से व्याख्या करने के लिए आपको कच्चे तारों का उपयोग करना होगा या बैकस्लाश ('\\') से बचाना होगा, या इसके बजाय आगे स्लैश का उपयोग करना होगा।

(संपादित करें: यदि आप स्लैश पूरी तरह os.path.join का उपयोग करके बच सकते हैं - पथ का निर्माण करने के लिए अनुशंसित तरीका)

+0

अच्छा उत्तर के रूप में व्याख्या किया जा रहा है, लेकिन आपके अंतिम बिंदु पर, os.path.join या os.path.sep का उपयोग करने से बेहतर है पथ मैन्युअल रूप से। –

+0

मेरे उद्देश्यों के लिए पूरी तरह से काम करता है। धन्यवाद! – Sean

+0

यह देखने में अच्छा लगा कि अनुमतियों के साथ मेरा स्वयं का संघर्ष भूल नहीं गया है :-) – Abgan

5

जबकि os.access अपने सबसे अच्छे रूप कोशिश करता है तो एक रास्ता पहुँचा जा सकता है या नहीं बताने के लिए, यह नहीं है दावा परफेक्ट बनना।

नोट:: अजगर डॉक्स से आई/ओ संचालन भी विफल हो सकता है जब एक्सेस() इंगित करता है कि वे कामयाब होने की, विशेष रूप से नेटवर्क फ़ाइल सिस्टम पर संचालन जो सामान्य POSIX परे अनुमतियाँ अर्थ विज्ञान हो सकता है के लिए अनुमति-बिट मॉडल।

यह पता लगाने के लिए अनुशंसित तरीका है कि उपयोगकर्ता को ऐसा करने का प्रयास करने के लिए क्या करना है, और ऐसा होने वाले अपवादों को पकड़ें।

0

दरअसल 'सी: \ हैकैक' आर'सी: \ हैकैसिस 'से अलग है। पायथन बिंदु से 'सी: \ हैकैसिस' वैध पथ नहीं है, इसलिए इसके बजाय 'सी: \\ हैकैस' का उपयोग करें। मुझे लगता है कि os.access बस ठीक काम करता है।

+0

''C: \ haveaccess' _is_ एक मान्य पथ है क्योंकि' \ h' का कोई विशेष अर्थ नहीं है, इसलिए यह काम करता है (शुद्ध भाग्य से बाहर है लेकिन यह काम करता हैं) –

संबंधित मुद्दे