os.environ是否有任何理由在Windows上包含所有環境變量大寫?我不明白爲什麼(僅在Windows上)它不會在使用相同大小寫的情況下加載它們它是如何定義的?爲什麼python大寫windows中的所有環境變量
是否有等效的os.environment實現,它可以加載環境變量信息而不用修改它們的Windows?
感謝
os.environ是否有任何理由在Windows上包含所有環境變量大寫?我不明白爲什麼(僅在Windows上)它不會在使用相同大小寫的情況下加載它們它是如何定義的?爲什麼python大寫windows中的所有環境變量
是否有等效的os.environment實現,它可以加載環境變量信息而不用修改它們的Windows?
感謝
因爲Windows環境變量的情況下敏感,而是一個Python字典是區分大小寫的。通過大寫所有條目,確保您始終能夠匹配條目。
從Python os.py
source code報價:
elif name in ('os2', 'nt'): # Where Env Var Names Must Be UPPERCASE
# But we store them as upper case
# ...
else: # Where Env Var Names Can Be Mixed Case
注意,os.environ
對象轉換所有訪問大寫,包括搜索:
def __setitem__(self, key, item):
putenv(key, item)
self.data[key.upper()] = item
def __getitem__(self, key):
return self.data[key.upper()]
# ...
def has_key(self, key):
return key.upper() in self.data
def __contains__(self, key):
return key.upper() in self.data
def get(self, key, failobj=None):
return self.data.get(key.upper(), failobj)
這意味着,如果一個程序沒有找到os.environ['windir']
,那麼值未設置爲。
如果有能夠訪問原始值,從nt
模塊抓住他們:
import nt
nt.environ
這是由OS傳遞的原始初始字典,不變:
>>> import nt
>>> sorted(nt.environ.keys())
['ALLUSERSPROFILE', 'APPDATA', 'COMPUTERNAME', 'ComSpec', 'CommonProgramFiles', 'CommonProgramFiles(x86)', 'CommonProgramW6432', 'FP_NO_HOST_CHECK', 'HOMEDRIVE', 'HOMEPATH', 'LOCALAPPDATA', 'LOGONSERVER', 'NUMBER_OF_PROCESSORS', 'OS', 'PATHEXT', 'PROCESSOR_ARCHITECTURE', 'PROCESSOR_IDENTIFIER', 'PROCESSOR_LEVEL', 'PROCESSOR_REVISION', 'PROMPT', 'PSModulePath', 'PUBLIC', 'Path', 'ProgramData', 'ProgramFiles', 'ProgramFiles(x86)', 'ProgramW6432', 'SESSIONNAME', 'SSH_AUTH_SOCK', 'SystemDrive', 'SystemRoot', 'TEMP', 'TMP', 'USERDNSDOMAIN', 'USERDOMAIN', 'USERNAME', 'USERPROFILE', 'windir', 'windows_tracing_flags', 'windows_tracing_logfile']
好吧,你知道如果有一種方法來獲取原始環境變量鍵/值在Python?我正在運行一個程序(用扭曲的方式)以區分大小寫的方式讀取環境變量,所以它沒有找到windir,因爲我們將它作爲WINDIR傳遞。 – MariangeMarcano
@MariangeMarcano:那不是問題; 'os.environ' *對象*也會進行大寫搜索。 –
問題是我們沒有使用python來搜索環境變量。我們調用另一個程序。 – MariangeMarcano
Windows環境變量名稱不區分大小寫。這可能是_why_的答案。 – Carsten
相關:[python環境案例敏感性 - os.environ \ [... \]](http://stackoverflow.com/q/7797269) –