2013-05-15 135 views
2

問題: Python中是否無法覆蓋HOMEDRIVEHOMEPATH變量? 這些變量存儲在哪裏,我沒有在環境變量對話框中看到它們。Python - 覆蓋環境變量homedrive和homepath

說明:

在Python中,你可以訪問使用

os.environ['variable_name'] 

例如,環境變量,如果我去到系統屬性 - >高級 - >環境變量,創建一個名爲GARY的系統變量價值XYZ,然後從我的python腳本我能夠成功訪問此使用

os.environ['GARY'] 

(按預期返回'XYZ')

但是,我無法更改變量HOMEDRIVE的值。當我在我的python腳本中使用os.environ['HOMEDRIVE']時,它返回C:。所以我去了系統屬性 - >高級 - >環境變量,我創建了一個名爲HOMEDRIVE的系統變量,並將它的值設置爲X:。但是,當我在我的腳本中使用

os.environ['HOMEDRIVE'] 

,它仍然返回C:

是沒可能覆蓋HOMEDRIVEHOMEPATH變量?這些在某些方面是特別的嗎?

這些變量存儲在哪裏,我沒有在環境變量對話框中看到它們。可能它們被存儲在其他地方,所以即使我在Windows中創建了一個HOMEDRIVE系統變量,它仍然在其他地方被覆蓋。

+0

你想在哪裏使用這些變量?難道你不能在你的代碼中重載它們:'os.environ ['HOMEDRIVE'] ='D:'' – Dhara

+0

哪個版本的Windows? – Dhara

+0

嗨達拉,這是Windows 7.我沒有嘗試覆蓋在我的代碼中,我認爲我可以做到這一點,我更有興趣弄清楚爲什麼這不起作用。該程序將在網絡上的許多計算機上運行,​​在某些情況下,我可能實際上要尊重HOMEDRIVE設置。在那些我不會讓我要求用戶在系統屬性中設置這個變量的。那是當我意識到這不適用於這個變量。 – Gary

回答

2

如果你想覆蓋僅在Python的變量,你可以做到這一點的代碼:

os.environ['HOMEDRIVE'] = 'D:' 

如果你把這個在sitecustomize.py,那麼它會在您每次調用Python腳本運行。從DOC:

...試圖導入一個模塊 名爲sitecustomize,它可以執行任意站點特定的 定製。它通常由系統管理員在 site-packages目錄中創建。

但是,如果要修改Windows自身的環境變量,請參閱this超級用戶stackexchange的答案。

+0

我不想硬編碼 - 我需要電腦使用當前設置的HOMEDRIVE,我只打算在某些未正確設置的計算機上的Windows環境中手動更改HOMEDRIVE。但是,從您的超級用戶stackexchange答案的鏈接,我現在想知道我的IT部門設置是否迫使HOMEDRIVE成爲該值。我還沒有確定這一點,但我會繼續前進,並將你的答案標記爲現在正確。如果我後來弄清楚到底是什麼問題,我會回覆。 – Gary

+0

很好的回答!這是有道理的。我被'os.environ.setdefault(key,val)'卡住了,它只在密鑰沒有值時才設置變量。這個答案是一個有意義的選擇。 – modulitos