环境变量在Python中不可用

Gab*_*aru 5 python bash environment-variables

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

$ 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'
Run Code Online (Sandbox Code Playgroud)

所以我有一个在 bash 中可用但在 python 中不可用的环境变量。怎么会发生这种情况以及如何解决它?以下是一些其他详细信息:

  • source envvars.sh通过命令设置环境变量
  • envvars.sh文件仅包含如下所示的行:KEY=value
  • 我在 bash 和 zsh 中重现了这个
  • 如果我这样做export BUCKET=$BUCKET,它会起作用

c4u*_*elf 5

这与 bash 中的变量范围有关。export使您的变量可用于子流程,例如:

\n\n
\xe2\x86\x92 export BUCKET=foo \n\xe2\x86\x92 env | grep BUCKET\n80:BUCKET=foo\n\xe2\x86\x92 PAIL=bar  \n\xe2\x86\x92 env | grep PAIL  # no output\n\xe2\x86\x92 python -c "import os; print os.environ[\'BUCKET\']"\nfoo\n\xe2\x86\x92 python -c "import os; print os.environ[\'PAIL\']"  \nTraceback (most recent call last):\n  File "<string>", line 1, in <module>\n  File "...", line 23, in __getitem__\n    raise KeyError(key)\nKeyError: \'PAIL\'\n\xe2\x86\x92 CAN=baz python -c "import os; print os.environ[\'CAN\']"\nbaz\n
Run Code Online (Sandbox Code Playgroud)\n\n

所以在子进程中PAIL是失败的。

\n