बैच फ़ाइल द्वारा पाइथन स्क्रिप्ट के लॉन्च होने वाली निर्देशिका का निर्धारण विभिन्न स्क्रिप्टिंग कार्यों के लिए आवश्यक है। यह लेख इस महत्वपूर्ण जानकारी को पुनः प्राप्त करने के लिए तीन पाइथन विधियों का पता लगाता है, जो विभिन्न कोडिंग शैलियों और प्राथमिकताओं को पूरा करता है।
विषयवस्तु की तालिका
- विधि 1:
os
मॉड्यूल का उपयोग करना - विधि 2:
sys
मॉड्यूल का उपयोग करना - विधि 3:
pathlib
मॉड्यूल का उपयोग करना - निष्कर्ष
- अक्सर पूछे जाने वाले प्रश्न (FAQ)
विधि 1: os
मॉड्यूल का उपयोग करना
os
मॉड्यूल वर्तमान कार्यशील निर्देशिका प्राप्त करने का एक सरल तरीका प्रदान करता है। os.getcwd()
फ़ंक्शन उस निर्देशिका को लौटाता है जहाँ से पाइथन स्क्रिप्ट (और इस प्रकार, बैच फ़ाइल) निष्पादित की गई थी।
import os
वर्तमान_निर्देशिका = os.getcwd()
print(f"वर्तमान निर्देशिका है: {वर्तमान_निर्देशिका}")
यह विधि सरल, व्यापक रूप से संगत और अधिकांश परिदृश्यों के लिए कुशल है।
विधि 2: sys
मॉड्यूल का उपयोग करना
sys
मॉड्यूल, जबकि सीधे वर्तमान कार्यशील निर्देशिका प्रदान नहीं करता है, लेकिन समान परिणाम प्राप्त करने के लिए os.path.dirname()
के साथ जोड़ा जा सकता है, खासकर जब स्क्रिप्ट के पथ से निपटते हैं। यह बहुत उपयोगी है जब कोई बैच फ़ाइल किसी उपनिर्देशिका में स्थित स्क्रिप्ट को निष्पादित करती है।
import sys
import os
try:
स्क्रिप्ट_पथ = sys.argv[0]
स्क्रिप्ट_निर्देशिका = os.path.dirname(स्क्रिप्ट_पथ)
print(f"स्क्रिप्ट की निर्देशिका है: {स्क्रिप्ट_निर्देशिका}")
except IndexError:
स्क्रिप्ट_निर्देशिका = os.getcwd()
print("स्क्रिप्ट सीधे चलाई गई; os.getcwd() का उपयोग करके")
print(f"स्क्रिप्ट की निर्देशिका (किनारे के मामलों को संभालना): {स्क्रिप्ट_निर्देशिका}")
sys.argv[0]
में स्क्रिप्ट का पथ होता है। os.path.dirname()
निर्देशिका निकालता है। try-except
ब्लॉक संभावित त्रुटियों को संभालता है यदि स्क्रिप्ट बिना पथ के निष्पादित की जाती है।
विधि 3: pathlib
मॉड्यूल का उपयोग करना
pathlib
मॉड्यूल पथ हेरफेर के लिए एक ऑब्जेक्ट-ओरिएंटेड दृष्टिकोण प्रदान करता है, जिससे पठनीयता में वृद्धि होती है और उन्नत कार्यक्षमताएँ प्रदान करता है।
from pathlib import Path
वर्तमान_निर्देशिका = Path().resolve()
print(f"वर्तमान निर्देशिका है: {वर्तमान_निर्देशिका}")
माता_पिता_निर्देशिका = Path().resolve().parent
print(f"माता-पिता निर्देशिका है: {माता_पिता_निर्देशिका}")
Path().resolve()
पूर्ण पथ देता है। यह विधि स्वच्छ और जटिल पथ संचालन के लिए अधिक उपयुक्त है।
निष्कर्ष
तीनों विधियाँ प्रभावी रूप से निष्पादन निर्देशिका निर्धारित करती हैं। os.getcwd()
सबसे सरल और अक्सर पर्याप्त है। sys
स्क्रिप्ट-संबंधित पथों के लिए लचीलापन प्रदान करता है, जबकि pathlib
पठनीयता को बढ़ाता है और जटिल पथ हेरफेर को सुविधाजनक बनाता है। सबसे अच्छा विकल्प आपकी विशिष्ट आवश्यकताओं और कोडिंग शैली पर निर्भर करता है।
अक्सर पूछे जाने वाले प्रश्न (FAQ)
- प्रश्न: यदि मेरी स्क्रिप्ट बैच फ़ाइल से भिन्न निर्देशिका से चलती है तो क्या होगा? उत्तर: विधियाँ स्क्रिप्ट की निष्पादन निर्देशिका लौटाती हैं, न कि आवश्यक रूप से बैच फ़ाइल की। बैच फ़ाइल की निर्देशिका प्राप्त करने के लिए, इसे अपनी पाइथन स्क्रिप्ट में एक तर्क के रूप में पास करें।
- प्रश्न:
os.getcwd()
औरPath().resolve()
में क्या अंतर है? उत्तर: दोनों वर्तमान कार्यशील निर्देशिका लौटाते हैं, लेकिनPath().resolve()
एकPath
ऑब्जेक्ट लौटाता है, जिससे आगे पथ संचालन सक्षम होता है।os.getcwd()
एक स्ट्रिंग लौटाता है। - प्रश्न: मुझे
sys.argv[0]
का उपयोग करके त्रुटि मिल रही है। उत्तर: अपनी बैच फ़ाइल के स्क्रिप्ट आह्वान की जाँच करें। त्रुटि किसी गलत पथ या स्क्रिप्ट को बैच फ़ाइल में कैसे बुलाया जाता है, इसमें किसी समस्या से उत्पन्न हो सकती है। विधि 2 में त्रुटि हैंडलिंग सुचारू हैंडलिंग के लिए महत्वपूर्ण है।