popen

2009-11-06 10 views
136

के लिए कार्य निर्देशिका निर्दिष्ट करें क्या Python's subprocess.Popen() में कमांड की चल रही निर्देशिका निर्दिष्ट करने का कोई तरीका है?popen

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

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

मेरे अजगर स्क्रिप्ट में C:\programs\python

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

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

+1

ध्यान रखें कि उपप्रक्रिया में रखना .call subprocess.Popen पर सिर्फ एक पतला आवरण है, और यह रैपर भी पॉपन के सभी तर्कों से संबंधित है, कम से कम जहां तक ​​मुझे याद है :) साधारण मामलों में, subprocess.call – shabunc

उत्तर

192

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

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

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

तो, अपना नया लाइन की तरह दिखना चाहिए

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

के लिए बेहतर छड़ी क्या effe सीटी, यदि कोई है, तो तर्कों के लिए शैल = ट्रू जोड़ना सीडब्ल्यूडी भी स्थापित करेगा? –

+2

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

+1

धन्यवाद बहुत! यह एक जादू की तरह काम करता है! – icn

संबंधित मुद्दे