Python 中没有可用的环境变量

Python 中没有可用的环境变量

我有一个关于环境变量的非常有趣的问题,并且谷歌搜索并没有给我带来任何有意义的结果:

$ 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,它就起作用了

答案1

这与 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失败。

相关内容