Bash
環境變數在 python 中不可用
關於環境變數,我有一個非常有趣的問題,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
是失敗的。