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

xea*_*its 33 python bash environment-variables pythonpath

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

但是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
Run Code Online (Sandbox Code Playgroud)

它注意到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
Run Code Online (Sandbox Code Playgroud)

可能有什么不对?

PS使用时出现问题$PYTHONPATH:

$ python -c 'import os; print os.getenv("PYTHONPATH")'
None
Run Code Online (Sandbox Code Playgroud)

xea*_*its 78

啊哈!解决方案很简单!

我用plain $ A=5命令设置变量; 当你使用$ export B="kkk"一切都很好.

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

  • 它在shell中创建一个变量
  • 并将其导出environmentshell中
  • 列表environment被传递给shell的子进程.

Plain $ A="kkk"只是在shell中创建变量而不对它做任何事情environment.

从shell调用的解释器从environment父节点获取它- shell.所以变量应该导出到environment之前.


Yan*_*ier 6

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