gpt4 book ai didi

python - 为什么python在windows中将所有环境变量大写

转载 作者:可可西里 更新时间:2023-11-01 14:45:04 29 4
gpt4 key购买 nike

为什么 os.environ 在 Windows 上包含所有环境变量都是大写的?我不明白为什么(仅在 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

这是操作系统传入的原始初始字典,未更改:

>>> 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 - 为什么python在windows中将所有环境变量大写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19023238/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com