2013-09-28 6 views
24

मैं ubuntu 13.04, बैश पर हूँ, python2.7.4अजगर - os.getenv और os.environ मेरी bash खोल

दुभाषिया चर मैं सेट नहीं देखा है की वातावरण चर नहीं दिख रहा।

यहाँ एक उदाहरण है:

$ echo $A 
5 
$ python -c 'import os; print os.getenv("A")' 
None 
$ python -c 'import os; print os.environ[ "A" ]' 
Traceback (most recent call last): 
    File "<string>", line 1, in <module> 
    File "/usr/lib/python2.7/UserDict.py", line 23, in __getitem__ 
    raise KeyError(key) 
KeyError: 'A' 

लेकिन सब कुछ PATH चर के साथ ठीक काम करता है:

$ echo $PATH 
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games 
$ python -c 'import os; print os.getenv("PATH")' 
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games 

और यह PATH में परिवर्तन पर ध्यान:

$ PATH="/home/alex/tests/:$PATH" 
$ echo $PATH 
/home/alex/tests/:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games 
$ python -c 'import os; print os.getenv("PATH")' 
/home/alex/tests/:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games 

क्या हो सकता है गलत?

पुनश्च समस्या आता है जब $PYTHONPATH का उपयोग कर:

$ python -c 'import os; print os.getenv("PYTHONPATH")' 
None 

उत्तर

56

अहा! समाधान सरल है!

मैं सादा $ A=5 कमांड के साथ चर सेट कर रहा था; जब आप $ export B="kkk" का उपयोग करते हैं तो सब कुछ ठीक है।

  • यह खोल के environment
  • सूची में खोल
  • और निर्यात उस में एक चर बनाता है:

    है becauseexport चर उप प्रक्रियाओं के लिए उपलब्ध बनाता environment खोल की उप-प्रक्रियाओं को पारित किया जाता है।

सादा $ A="kkk" सिर्फ खोल में चर बनाता है और environment के साथ कुछ भी नहीं करता है।

शैल से बुलाया गया दुभाषिया माता-पिता से - environment प्राप्त करता है - खोल। तो वास्तव में चर को पहले environment में निर्यात किया जाना चाहिए।

+0

Thx, मुझे कुछ सिर pouding बचाया =) – Justin

4

उन चर (बैश शब्दावली में पैरामीटर) पर्यावरण चर नहीं हैं। आप उन्हें export या declare -x का उपयोग करके पर्यावरण में निर्यात करना चाहते हैं। bash documentation on environment देखें।

+0

हे! शब्दावली अस्पष्ट है: http://docs.python.org/2/using/cmdline.html#environment-variables – xealits

+0

सुनिश्चित नहीं है कि आप किस शब्द की शिकायत कर रहे हैं, लेकिन समस्या बाश के साथ है। पाइथन का कोई नियंत्रण नहीं है कि पर्यावरण में कौन से चर बाश डालते हैं। –

+0

मेरा मतलब है कि अगर यह एक "पैरामीटर" या "चर" है - इससे कोई फर्क नहीं पड़ता। मुझे काम करने के लिए 'पायथनपथ' स्थापित करने की परवाह है। हालांकि, मैं आपका बिंदु देखता हूं - आपका मतलब है कि असाइनमेंट '$ ए = 5' बिल्कुल पर्यावरण चर नहीं बनाता है। खोल में चर की एक सूची है, जिसे "पर्यावरण" कहा जाता है। यह उप-प्रक्रियाओं को पारित किया जाता है। और 'निर्यात' उस सूची में कुछ चर घोषित करता है (उन्हें इसमें निर्यात करता है)। सादा असाइनमेंट उस सूची में चर नहीं बनाता है - यह उन्हें कहीं और रखता है। मैं इन सबके अनुसार अपना जवाब सही कर दूंगा। – xealits