Windows で os.environ にすべての環境変数が大文字で含まれている理由はありますか?
Windows用に変更せずに環境変数情報をロードする os.environment の同等の実装はありますか?
ありがとう
Windows 環境変数では大文字と小文字が区別されませんが、Python 辞書では大文字と小文字が区別されるためです。すべてのエントリを大文字にすることで、エントリを常に一致させることができます。
Pythonos.py
ソースコードからの引用:
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']