2011-05-27 5 views
8

का उपयोग कर निर्देशिकाओं के आसपास वैकल्पिक कैसे करें मैं उपप्रोसेस का उपयोग कर वर्तमान निर्देशिका को बदलना चाहता हूं।subprocess

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

import os, sys, subprocess 

os.environ['a'] = '/home' 
os.environ['b'] = '/' 

subprocess.call('cd $a', shell=True) 
subprocess.call('ls', shell=True) 

subprocess.call('cd $b', shell=True) 
subprocess.call('ls', shell=True) 

मुझे लगता है कि यह एक कमांड लाइन यूनिक्स

$ export a='/home' 
$ export b='/' 

$ cd $a 
$ ls 
$ cd $b 
$ ls 

लेकिन यह नहीं होता है की तरह काम करना चाहिए ..

मैं बदलने के लिए क्या करना चाहिए कैसे वर्तमान डीआईआर?

धन्यवाद।

+2

मुझे नहीं लगता कि यह संभव है। उपप्रोसेसर की उपनिर्देशिका वर्तमान प्रक्रिया की निर्देशिका को प्रभावित नहीं करती है। तुम्हारी क्या हासिल करने की इच्छा है? –

उत्तर

13

निर्देशिका बदलने के लिए बस os.chdir() का उपयोग करें।

आप subprocess.Popen(...) चलाकर विशिष्ट निर्देशों में आदेश निष्पादित भी कर सकते हैं - इसमें एक वैकल्पिक पैरामीटर cwd=None है। कार्यशील निर्देशिका निर्दिष्ट करने के लिए बस इसका इस्तेमाल करें।

इसके अलावा, आप एक छोटे मॉड्यूल को देख सकते हैं जो मैंने लिखा है जो पाइथन मानक पुस्तकालय से कुछ गायब कार्यक्षमता को पूरा करता है। शायद इस मॉड्यूल विशेष रूप से https://github.com/ssbarnea/tendo/blob/master/tendo/tee.py

+0

क्या इसे हल करने का कोई और तरीका नहीं है? – JonatasTeixeira

+1

बीटीडब्ल्यू, आप कॉल किए गए प्रोजेक्ट से कॉलिंग प्रक्रिया की वर्तमान निर्देशिका को नहीं बदल सकते हैं। मैं यह भी नहीं देखता कि आप कभी ऐसा क्यों करना चाहते हैं। – sorin

+1

पोस्ट कैसे प्रश्न का उत्तर देता है? – khachik