簡體   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