2012-01-27 10 views
7

यह निर्धारित करने के लिए एक पोर्टेबल तरीका क्या होगा कि कोई पाइथन प्रक्रिया फ़ाइल पर फ़ाइल को स्थानांतरित/हटाए बिना फ़ाइल को स्थानांतरित/हटा सकती है?यह निर्धारित करने का पोर्टेबल तरीका है कि कोई प्रक्रिया फ़ाइल को स्थानांतरित/हटा सकती है या नहीं?

मामले का उपयोग करें: मैं एक स्क्रिप्ट के उपयोगकर्ता को सूचित करने के स्थानांतरित/ आपरेशन हटाना सफल होगा/प्रोसेसिंग शुरू करने से पहले असफल है या नहीं करना चाहते हैं।

यदि कोई समाधान है जो केवल लिनक्स में काम करता है, तो मैं इस पल के लिए ठीक हूं।

धन्यवाद।

अद्यतन: मैं समझता हूँ कि os.access इस्तेमाल किया जा सकता है, लेकिन असली uid/gid तक सीमित है।

+0

सुनिश्चित नहीं है कि आप सुरक्षा मॉडल का सही ढंग से उपयोग कर रहे हैं लेकिन वैसे भी रुचि रखते हैं। मैंने जो देखा है उसके लिए एकमात्र कैननिकल कार्यान्वयन कर्नेल के अंदर है, मुझे यकीन नहीं है कि यह किसी भी तरह से उजागर हुआ है, और ऐसा करने के लिए गलत प्रकार के प्रोग्रामिंग को प्रोत्साहित किया जा रहा है। –

+3

Google में "मैन एक्सेस" डालने के बारे में कुछ सही नहीं है ... –

+0

शायद 'बूल (os.stat (filepath) .st_mode और stat.S_IWGRP) '? – reclosedev

उत्तर

1

काम को जोड़ने के लिए फ़ाइल खोलना होगा?

try: 
    open(filename,'a').close() 

... और कोई अपवाद पकड़ने से संकेत मिलता है कि असफल रहा?

सावधानी के साथ प्रयोग करें, मुझे सच में यकीन नहीं है कि गलती से कुछ भी बुरा नहीं होगा। उदाहरण के लिए कम से कम अस्थायी रूप से आप फ़ाइल को लॉक कर देंगे, और मुझे नहीं पता कि यह बाइनरी फ़ाइल के साथ क्या करेगा।

+0

यदि आप किसी फ़ाइल में जोड़ सकते हैं, लेकिन निर्देशिका में लिखना नहीं है, तो आप इसे हटा या स्थानांतरित नहीं कर सकते हैं। – ArjunShankar

+0

अच्छा बिंदु। आप निर्देशिका में एक temp फ़ाइल बनाने और हटाने का भी प्रयास कर सकते हैं। यह सब मेरे लिए काफी बेकार लगता है, स्वीकार्य रूप से, लेकिन यह कम से कम विशिष्ट नहीं है। –

+0

हम्म, यह बनाने/हटाने का विचार अधिक मूर्ख प्रमाण और 'पोर्टेबल' लगता है (हालांकि यह बदसूरत है)। मेरा सुझाव है कि आप अपना जवाब संपादित करें और इसे अंदर रखें। केवल शेष चीज यूनिक्स पर निर्देशिका चिपचिपा बिट को संभालने वाली होगी। – ArjunShankar

0

अगर मैं सही ढंग से याद, तीन शर्तों UNIXes पर इस बात के लिए पूरा किया जाना चाहिए:

  1. उपयोगकर्ता मूल फ़ाइल युक्त निर्देशिका में लिखने (हटाने के लिए या ले जा) सकते
  2. निर्देशिका मूल युक्त हैं फ़ाइल चिपचिपा बिट सेट है, मूल फ़ाइल उपयोगकर्ता
  3. एक चाल के मामले में, अतिरिक्त, उपयोगकर्ता निर्देशिका जहां यह
ले जाया जाना चाहिए करने के लिए लिख सकते हैं (विलोपन या इस कदम के लिए) के स्वामित्व में किया जाना चाहिए

पायथन में, शर्तों 1 और 3 का परीक्षण os.access और ओएसस्टैट here और here के साथ 2 स्थिति के साथ किया जा सकता है।

अद्यतन: आप प्रभावी यूआईडी के साथ काम करना चाहते हैं, तो os.geteuid() का उपयोग करें और साथ ही 1 और 3 के लिए जाँच करने की व्याख्या stat का परिणाम है।

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

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