2013-09-28 20 views
24

, python2.7.4piton - os.getenv ve os.environ ben ubuntu 13.04, bash duyuyorum benim bash kabuğu

belirlediğim değişkenleri görmüyor tercüman çevre değişkenleri görmüyorum. İşte

bir örnek:

$ 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' 

Ama her şey PATH değişkenle çalışıyor:

$ 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 

Ve PATH değişiklikleri fark eder:

$ 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 

ne olabilir yanlış? $PYTHONPATH kullanırken

PS sorun gelir:

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

cevap

56

Aha! çözüm basit!

Ben düz $ A=5 komutuyla değişkenleri batıyordu

; $ export B="kkk" kullandığınızda her şey yolunda.

  • o kabuğun environment
  • liste içine kabuk
  • ve ihracat bunu bir değişken oluşturur: becauseexport olduğunu

    alt süreçlere uygun değişken yapar environment, kabuğun alt işlemlerine geçirilir.

Düz $ A="kkk" yalnızca kabukta değişkenler oluşturur ve environment ile hiçbir şey yapmaz. Kabuk - kabuğundan denilen

tercüman o ebeveynden environment var elde eder. Yani gerçekten değişken daha önce environment'a aktarılmalıdır.

+0

Thx, bana biraz kafa kazandı pouding =) – Justin

4

olanlar değişkenler (bash terminolojide parametreler) değil ortam değişkenlerdir. Bunları export veya declare -x kullanarak çevreye vermek istiyorsunuz. bash documentation on environment'a bakın.

+0

hey! terminoloji belirsizdir: http://docs.python.org/2/using/cmdline.html#environment-variables – xealits

+0

Hangi terimden şikayet ettiğinizden emin değilsiniz, ancak sorun bash ile ilgilidir. Python'un bash'ın çevreye hangi değişkenleri koyduğu konusunda hiçbir kontrolü yoktur. –

+0

Yani, eğer bir "parametre" veya "değişken" ise - benim için önemli değil. PYTHONPATH'ın çalışmasına özen gösteriyorum. Yine de, sizin noktanızı görüyorum - demek ki bu atama '$ A = 5' hiç bir ortam değişkeni yapmıyor. Kabukta "çevre" adı verilen değişkenlerin bir listesi vardır. Alt süreçlere geçilir. Ve 'export', bu listede bazı değişkenler açıklıyor (bunları içine aktarıyor). Düz atama o listede değişkenler yaratmaz - başka bir yere koyar. Cevabımı tüm bunlara göre düzeltirim. – xealits