作者uranusjr (←這人是超級笨蛋)
看板Python
標題Re: [問題] os.environ 和 os.putenv
時間Thu May 12 22:40:44 2016
※ 引述《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, 假裝其他的都不存在』
你研究那麼多其實沒什麼用
--
→ GNUGCC:void main(void) 的寫法是可行的唷^^08/10 00:59
→ GNUGCC:雖然這個寫法較傳統,但是語法與文法都正確哦^^08/10 02:16
→ GNUGCC:目前我使用的 Visual C++ 都接受 void main(void) 與 08/10 20:18
→ GNUGCC:int main(void),各位可以把 C++ 專案改成原生 C++ 類型來 08/10 20:19
→ GNUGCC:用 void main(void) 來寫發現也可通過編譯. 08/10 20:21
→ GNUGCC:這個就是 Visual C++ 的彈性.08/11 20:23
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 218.161.19.12
※ 文章網址: https://www.ptt.cc/bbs/Python/M.1463064046.A.4CC.html
推 obelisk0114: python 可以不透過呼叫 cmd 直接修改作業系統的環境? 05/13 16:51