![](/img/trans.png)
[英]python - os.getenv and os.environ don't see environment variables of my bash shell
[英]When would os.environ['foo'] not match os.getenv('foo')?
我有一個小的Python應用程序,通過subprocess.Popen
啟動,它以環境變量的形式獲取一些參數。 我通過將環境結構傳遞給Popen
調用來完成此操作。 然后程序通過os.getenv
讀取變量。
或者更確切地說,它曾經以這種方式閱讀它們。 在Windows上,它工作正常。 但是在我們的FreeBSD服務器上, os.getenv
為我們傳入的所有參數返回None
。奇怪的是os.environ
的值很好 - 事實上,只需將所有os.getenv('foo')
調用切換到os.environ['foo']
使一切在兩個平台上都運行良好。
為什么這些值不同? 什么時候適合另一個?
os.environ
是在導入os
模塊時創建的,除非直接修改,否則不會反映之后發生的環境變化。 然而,有趣的是, os.getenv()
實際上並沒有獲得最新的環境變量,至少在CPython中沒有。 你看,在CPython中, os.getenv()
顯然只是os.environ.get()
的包裝器(參見http://hg.python.org/cpython/file/6671c5039e15/Lib/os.py#l646 ) 。 因此,似乎將os.getenv()
與所述實現一起使用的os.getenv()
是當你想要在os.environ
的鍵中找不到環境變量名時返回默認值而不是KeyError
或者其他什么拋出,你想保存幾個字符。
完全有可能FreeBSD上的實現有一些奇怪的噱頭導致它采取不同的行為,但我不確定為什么會出現這種情況。 如果可以的話,看看你使用的一台FreeBSD機器上的os.py
副本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.