Re: [問題] os.environ 和 os.putenv

看板Python作者 (←這人是超級笨蛋)時間9年前 (2016/05/12 22:40), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《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,
void main(void) 的寫法是可行的唷^^
08/10 00:59

08/10 02:16,
雖然這個寫法較傳統,但是語法與文法都正確哦^^
08/10 02:16

08/10 20:18,
目前我使用的 Visual C++ 都接受 void main(void) 與
08/10 20:18

08/10 20:19,
int main(void),各位可以把 C++ 專案改成原生 C++ 類型來
08/10 20:19

08/10 20:21,
用 void main(void) 來寫發現也可通過編譯.
08/10 20:21

08/11 20:23,
這個就是 Visual C++ 的彈性.
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
python 可以不透過呼叫 cmd 直接修改作業系統的環境?
05/13 16:51, 1F
文章代碼(AID): #1ND9NkJC (Python)
討論串 (同標題文章)
文章代碼(AID): #1ND9NkJC (Python)