※ 引述《obelisk0114 (追風箏的孩子)》之銘言:
: 一.
: 假如只是要獲得某個環境的絕對路徑,例如: AppData
: os.getenv('LOCALAPPDATA') 和 os.environ['LOCALAPPDATA']
: 完全一樣嗎 ?
getenv 在 key 不存在時會回傳 default (預設是 None)
所以其實是和 os.environ.get() 一樣
: 二.
: 若作業系統支援 os.putenv()
: 使用 os.environ 則會自動呼叫 os.putenv 來改變環境變量
: 若直接使用 os.putenv 而不透過 os.environ 時, 則不會改變 os.environ 裡的變量
: 但是 python 不是不能直接操作作業系統嗎,
: 所以結束 python 之後環境變量還是一樣
: 這樣兩者有何差別 ?
首先, Python「可以」操作作業系統
不過這個先不管
差別在於, 如果你在 putenv 後開啟一個 subprocess
(包含用 os.system, subprocess 等等)
這個子程序會看到 os.putenv 設定的變數
但程序本身並不會看到
另一方面, 直接修改 environ 則是可以被程序本身使用, 子程序也會看到
: 三.
: 作業系統不支援 os.putenv() 時,
: os.environ 會創造一個新的程序來使用修改過的環境變量
: 實際用途是甚麼 ?
沒這種事, 你讀錯文件了
文件說的是, 如果作業系統不支援 putenv
則子程序會使用 os.environ 的一個 copy 作為它的環境
如果有 putenv, 則修改 os.environ 會直接觸發 putenv
這種情況下子程序就不需要這個 mapping, 直接和作業系統要環境變數即可
: 四.
: 有些作業系統, 像是 FreeBSD 和 Mac OS X, 設定 os.environ 會導致記憶體洩漏
: 程式終止或是結束 python 可以重新取回該漏失的記憶體嗎 ?
可以
: 直接使用 os.putenv() 也會造成記憶體洩漏嗎 ?
會
: 有可能重新用另一段程式碼來使用該漏失的記憶體嗎 ?
不行