के माध्यम से एक पायथन स्क्रिप्ट लॉन्च करना मेरे पास एक निष्पादन योग्य पायथन स्क्रिप्ट है जो "स्क्रिप्ट" निर्देशिका में मौजूद है, और मूल निर्देशिका में उस स्क्रिप्ट (फ़ाइल को लॉन्च करने के लिए उपयोग किया जाता है) का एक प्रतीकात्मक लिंक है। कुछ की तरह:एक प्रतीकात्मक लिंक
.
├── scripts
│ ├── const.py
│ ├── fops.py
│ ├── i_build.py
│ └── i_Props.ini
└── build_i -> scripts/i_build.py
मैं के माध्यम से शुरू करने के लिए/मेरी स्क्रिप्ट चलाने में सक्षम होना चाहते हैं:
python build_i
रूट निर्देशिका से। I_build.py स्क्रिप्ट i_Props.ini खोलने का प्रयास करेगा और वहां पर मौजूद कुछ के आधार पर कुछ जादू करेगी।
समस्या यह है कि जब i_build.py स्क्रिप्ट रूट निर्देशिका में symlink के माध्यम से लॉन्च की जाती है, i_build.py स्क्रिप्ट अन्य फ़ाइलों के लिए मूल निर्देशिका में दिखाई देगी (नहीं/स्क्रिप्ट निर्देशिका जहां i_build.py है संग्रहीत)। विफल रहता है
PROP_FILE = "i_Props.ini"
और उस को खोलने के लिए प्रयास करता है, और उसके बाद:
i_build.py फ़ाइल रंगमंच की सामग्री के रूप में स्थान फ़ाइल है। मैं स्पष्ट कारणों से पथ को हार्डकोड नहीं करना चाहता हूं।
मुख्य फ़ाइल में os.getcwd()
जोड़ने वाला एक त्वरित परीक्षण मेरे संदेह की पुष्टि करता है कि ऐसा लगता है कि सीडब्ल्यूडी रूट निर्देशिका है, और __file__
की जांच का कहना है कि यह प्रतीकात्मक लिंक ("build_i") है।
क्या कोई ऐसा कुछ भी है जो पाइथन __file__
नाम और सीडब्ल्यूडी के लिए प्रतीकात्मक गंतव्य का उपयोग करने के लिए कर सकता है?
आप शायद अन्य ऑपरेटिंग सिस्टम पर जोकुछ/जो भी हो, का उपयोग कर फाइल सिस्टम की निगरानी कर सकते हैं। अंततः दो स्थानों को अलग करने वाली चीज इनोड हो सकती है जो निष्पादन शुरू करती है। इनमें से कोई भी कुछ खोदने के बिना बहुत स्पष्ट रूप से उजागर नहीं हुआ है .. एकमात्र अन्य चीज जो मैं सोच सकता हूं वह नरम लिंक की बजाय एक कठिन लिंक होगा, लेकिन मुझे लगता है कि इसका विपरीत प्रभाव हो सकता है। एक शेल चाल है जो आप कर सकते हैं, मेरा मानना है कि जेड शैल में 'प्रोग्राम चलाने से पहले' हुक है जो आपके वास्तविक सीडब्ल्यूडी को स्क्रिप्ट को एक तर्क के रूप में खिला सकता है? .. – synthesizerpatel
यह एक उत्तर के योग्य नहीं है इसलिए मैं ' मैं टिप्पणी कर रहा हूँ। आप 'os.readlink()' का उपयोग करके सिम्लिंक पढ़ सकते हैं, और परिणाम से स्क्रिप्ट को 'subprocess.Popen() 'के साथ चला सकते हैं। थोड़ा उलझन में, लेकिन नौकरी को कुछ भी कड़ी मेहनत नहीं करता है और यह निर्भरता को जोड़ता नहीं है। – ThinkChaos
संबंधित: [मैं पाइथन में वर्तमान निष्पादित फ़ाइल का मार्ग कैसे प्राप्त करूं?] (Http://stackoverflow.com/q/2632199/4279) – jfs