मैं यह देखना चाहूंगा कि अजगर में वर्तमान स्क्रिप्ट निर्देशिका को निर्धारित करने का सबसे अच्छा तरीका क्या है?
मैंने पाया कि अजगर कोड को कॉल करने के कई तरीकों के कारण, एक अच्छा समाधान खोजना मुश्किल है।
यहाँ कुछ समस्याएं हैं:
__file__
स्क्रिप्ट के साथ निष्पादित होने पर परिभाषित नहीं किया जाता हैexec
,execfile
__module__
केवल मॉड्यूल में परिभाषित किया गया है
बक्सों का इस्तेमाल करें:
./myfile.py
python myfile.py
./somedir/myfile.py
python somedir/myfile.py
execfile('myfile.py')
(किसी अन्य स्क्रिप्ट से, जो किसी अन्य निर्देशिका में स्थित हो सकती है और जिसमें एक और वर्तमान निर्देशिका हो सकती है।
मुझे पता है कि कोई सही समाधान नहीं है, लेकिन मैं सबसे अच्छे दृष्टिकोण की तलाश कर रहा हूं जो अधिकांश मामलों को हल करता है।
सबसे अधिक उपयोग किया जाने वाला तरीका है, os.path.dirname(os.path.abspath(__file__))
लेकिन अगर आप स्क्रिप्ट को दूसरे के साथ निष्पादित करते हैं तो यह वास्तव में काम नहीं करता है exec()
।
चेतावनी
वर्तमान निर्देशिका का उपयोग करने वाला कोई भी समाधान विफल हो जाएगा, यह स्क्रिप्ट को कॉल करने के तरीके के आधार पर भिन्न हो सकता है या इसे रनिंग स्क्रिप्ट के अंदर बदला जा सकता है।
pathlib
यदि आप अजगर 3.4 या उच्चतर का उपयोग कर रहे हैं तो Ron Kalian का समाधान देखें : stackoverflow.com/a/48931294/1011724
python myfile.py
एक शेल से किया जाता है, तो यह काम करता है, लेकिन दोनों के भीतर :!python %
और विम के साथ सिस्टम को निर्दिष्ट पथ नहीं मिल सकता है। यह काफी कष्टप्रद है। क्या कोई इसके पीछे के कारण और संभावित कार्यदक्षता पर टिप्पणी कर सकता है? :!python myfile.py