Re: [問題] os.environ 和 os.putenv
※ 引述《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() 也會造成記憶體洩漏嗎 ?
會
: 有可能重新用另一段程式碼來使用該漏失的記憶體嗎 ?
不行
---
其實除非你要用到非常接近 C API 的功能, 只要記住一句話就好了
『永遠使用 os.environ, 假裝其他的都不存在』
你研究那麼多其實沒什麼用
--
→
08/10 00:59,
08/10 00:59
→
08/10 02:16,
08/10 02:16
→
08/10 20:18,
08/10 20:18
→
08/10 20:19,
08/10 20:19
→
08/10 20:21,
08/10 20:21
→
08/11 20:23,
08/11 20:23
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 218.161.19.12
※ 文章網址: https://www.ptt.cc/bbs/Python/M.1463064046.A.4CC.html
推
05/13 16:51, , 1F
05/13 16:51, 1F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
Python 近期熱門文章
PTT數位生活區 即時熱門文章