संपादित करें : डेव जोन्स का जवाब भी देखें : पायथन 3.3 से, आप इस फ़ंक्शन को प्रदान xकरने के open()लिए ध्वज का उपयोग कर सकते हैं ।
नीचे मूल उत्तर
हां, लेकिन पायथन के मानक open()कॉल का उपयोग नहीं कर रहा है । आपको os.open()इसके बजाय उपयोग करने की आवश्यकता होगी , जो आपको अंतर्निहित सी कोड को झंडे निर्दिष्ट करने की अनुमति देता है।
विशेष रूप से, आप उपयोग करना चाहते हैं O_CREAT | O_EXCL। मेरे यूनिक्स सिस्टम के open(2)तहत मैन पेज से O_EXCL:
सुनिश्चित करें कि यह कॉल फ़ाइल बनाता है: यदि यह ध्वज के साथ संयोजन में निर्दिष्ट किया गया है O_CREAT, और pathname पहले से मौजूद है, तो open()विफल हो जाएगा। निर्दिष्ट नहीं होने पर व्यवहार O_EXCLअपरिभाषित O_CREATहै।
जब इन दो झंडों को निर्दिष्ट किया जाता है, तो प्रतीकात्मक लिंक का पालन नहीं किया जाता है: यदि पथनाम एक प्रतीकात्मक लिंक है, तो यह इस बात की open()परवाह किए बिना कि प्रतीकात्मक लिंक कहाँ इंगित करता है।
O_EXCL NFSv3 का उपयोग करते समय या बाद में कर्नेल 2.6 या बाद में NFS पर समर्थित है। ऐसे वातावरण में जहां NFS O_EXCLसमर्थन प्रदान नहीं किया जाता है, प्रोग्राम जो लॉकिंग कार्यों को करने के लिए उस पर भरोसा करते हैं, उनमें एक दौड़ की स्थिति होगी।
तो यह सही नहीं है, लेकिन AFAIK यह निकटतम है आप इस दौड़ की स्थिति से बचने के लिए प्राप्त कर सकते हैं।
संपादित करें: अभी भी लागू होने के os.open()बजाय उपयोग करने के अन्य नियम open()। विशेष रूप से, आप पढ़ने या लिखने के लिए लौट आए फ़ाइल वर्णनकर्ता का उपयोग करना चाहते हैं, आप में से एक की आवश्यकता होगी O_RDONLY, O_WRONLYया O_RDWRझंडे के रूप में अच्छी तरह से।
सभी O_*झंडे पायथन के osमॉड्यूल में हैं, इसलिए आपको आदि का import osउपयोग करना होगा os.O_CREAT।
उदाहरण:
import os
import errno
flags = os.O_CREAT | os.O_EXCL | os.O_WRONLY
try:
file_handle = os.open('filename', flags)
except OSError as e:
if e.errno == errno.EEXIST: # Failed as the file already exists.
pass
else: # Something unexpected went wrong so reraise the exception.
raise
else: # No exception, so the file must have been created successfully.
with os.fdopen(file_handle, 'w') as file_obj:
# Using `os.fdopen` converts the handle to an object that acts like a
# regular Python file object, and the `with` context manager means the
# file will be automatically closed when we're done with it.
file_obj.write("Look, ma, I'm writing to a new file!")