繁体   English   中英

python - os.getenv 和 os.environ 看不到我的环境变量 bash shell

[英]python - os.getenv and os.environ don't see environment variables of my bash shell

我在 ubuntu 13.04, bash, python2.7.4

解释器看不到我设置的变量。

这是一个例子:

$ echo $A
5
$ python -c 'import os; print os.getenv( "A" )'
None
$ python -c 'import os; print os.environ[ "A" ]'
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: 'A'

但是使用PATH变量一切正常:

$ echo $PATH 
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
$ python -c 'import os; print os.getenv("PATH")'
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

它注意到PATH的变化:

$ PATH="/home/alex/tests/:$PATH"
$ echo $PATH 
/home/alex/tests/:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
$ python -c 'import os; print os.getenv("PATH")'
/home/alex/tests/:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

有什么问题吗?

PS 使用$PYTHONPATH时出现问题:

$ python -c 'import os; print os.getenv("PYTHONPATH")'
None

啊哈! 解决方法很简单!

我用普通的$ A=5命令设置变量; 当您使用$ export B="kkk"一切都很好。

这是贝科 使用 export使得变量提供给子流程:

  • 它在外壳中创建一个变量
  • 并将其导出到外壳environment
  • 列表environment被传递到Shell的子进程。

Plain $ A="kkk"只会在shell中创建变量,而不会对environment执行任何操作。

从外壳程序调用的解释器从父级外壳程序获取其environment 因此,实际上应该先将变量导出到environment

这些变量(bash术语中的参数)不是环境变量。 您想使用exportdeclare -x将它们导出到环境中。 请参阅有关环境bash文档

添加,因为我没有看到具有我所遇到的确切问题的答案。 如果您有多个“外壳”,例如 BASH 和 Z-Shell,请确保您已在正确的 shell 中导出环境,并且这对 python 可用。

如果您使用 VSCode 并将默认值 shell 设置为 Z shell,那么可以理解,如果 .zshrc 中不存在.bashrc中的变量,则.zshrc解释器将看不到它们。 解决方案是在两个 shell 中export变量或将默认值 shell 更改为具有必要变量的那个。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM