मैं पॉपेन के लिए कार्य निर्देशिका कैसे निर्दिष्ट कर सकता हूं


187

क्या पायथन में कमांड की रनिंग डायरेक्टरी को निर्दिष्ट करने का कोई तरीका है subprocess.Popen()?

उदाहरण के लिए:

Popen('c:\mytool\tool.exe', workingdir='d:\test\local')

मेरी पायथन लिपि में स्थित है C:\programs\python

क्या C:\mytool\tool.exeनिर्देशिका में चलना संभव है D:\test\local?

मैं एक उप-प्रक्रिया के लिए कार्यशील निर्देशिका कैसे निर्धारित करूं?


2
ध्यान रखें कि subprocess.call सबप्रोसेस पर बस एक पतला आवरण है। बंद करें, और यह आवरण पॉपेन के सभी तर्कों के साथ-साथ कम से कम जहाँ तक मुझे याद है :) के साथ काम करता है :) साधारण मामलों में,
सबप्रोसेसर के

जवाबों:


270

subprocess.Popen cwdवर्तमान कार्य निर्देशिका को सेट करने के लिए एक तर्क लेता है ; आप अपने बैकस्लैश ( 'd:\\test\\local') से बचना चाहते हैं , या उपयोग कर सकते हैं r'd:\test\local'ताकि बैकस्लैश की व्याख्या पायथन द्वारा एस्केप सीक्वेंस के रूप में नहीं की जा सके। जिस तरह से आपने इसे लिखा है, \tभाग का अनुवाद किया जाएगा a tab

तो, आपकी नई पंक्ति इस तरह दिखनी चाहिए:

subprocess.Popen(r'c:\mytool\tool.exe', cwd=r'd:\test\local')

अपने पाइथन स्क्रिप्ट पथ को cwd के रूप में उपयोग करने के लिए, import osऔर इसका उपयोग करके cwd को परिभाषित करें:

os.path.dirname(os.path.realpath(__file__)) 

2
क्या प्रभाव, यदि कोई हो, शेल = तर्क को जोड़ना भी cwd की स्थापना पर है?
टी। स्टोन

3
@T। स्टोन: एक स्टैंडअलोन निष्पादन योग्य के लिए, इसे कुछ भी नहीं बदलना चाहिए, जब तक कि एक्स शेल में कुछ पर्यावरण चर पर निर्भर न हो, हो सकता है। लेकिन, shell=Falseआप शेल शेलइन का उपयोग नहीं कर सकते हैं जैसे cd: यानी, इसे लिनक्स पर शेल के साथ दोनों तरीकों से subprocess.Popen("cd /tmp; pwd")
आज़माएँ

12
अजगर 3 में कम से कम, आपको विंडोज़ मशीन पर होने पर भी बैकस्लैश का उपयोग करने की आवश्यकता नहीं है, मैंने अभी किया है subprocess.call(["C:/Users/Bob/Some.exe"], cwd="C:/Users/Jane/")और यह ठीक काम करता है
mgrandi

7
क्या कार्यशील निर्देशिका को एक निरपेक्ष पथ होना चाहिए?
२२

10
यह subprocess.check_output () के लिए भी काम करता है। धन्यवाद !
सैमुअल Dauzon
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.