关于环境变量,我有一个非常有趣的问题,谷歌搜索并没有向我显示任何有意义的结果:
$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中都重现了这一点
>如果我执行导出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>",in <module> File "...",in __getitem__ raise KeyError(key) KeyError: 'PAIL' → CAN=baz python -c "import os; print os.environ['CAN']" baz
所以在子进程中PAIL是失败的.