Bash

環境變數在 python 中不可用

  • January 10, 2015

關於環境變數,我有一個非常有趣的問題,Google搜尋並沒有顯示任何有意義的結果:

$ echo $BUCKET && python -c "import os; print os.environ['BUCKET']"
mule-uploader-demo
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: 'BUCKET'

所以我有一個在 bash 中可用但在 python 中不可用的環境變數。這怎麼會發生,我該如何解決?以下是一些額外的細節:

  • 通過source envvars.sh命令設置環境變數
  • envvars.sh文件僅包含如下所示的行:KEY=value
  • 我已經在 bash 和 zsh 中複製了這個
  • 如果我做一個export BUCKET=$BUCKET,它的工作原理

這與 bash 中的變數範圍有關。export使您的變數可用於子流程,例如:

→ export BUCKET=foo 
→ env | grep BUCKET
80:BUCKET=foo
→ PAIL=bar  
→ env | grep PAIL  # no output
→ python -c "import os; print os.environ['BUCKET']"
foo
→ python -c "import os; print os.environ['PAIL']"  
Traceback (most recent call last):
 File "<string>", line 1, in <module>
 File "...", line 23, in __getitem__
   raise KeyError(key)
KeyError: 'PAIL'
→ CAN=baz python -c "import os; print os.environ['CAN']"
baz

所以在子程序中PAIL是失敗的。

引用自:https://serverfault.com/questions/658626