Python环境大小写敏感 - os.environ[...]

2024-09-28 23:29:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要以独立于平台的方式访问进程的环境块。在

pythonos module docs没有指定os.environ/os.getenv的区分大小写的任何内容。在我的ubuntu和win7devbox上进行实验,我看到了操作系统环境在linux上区分大小写,但在windows上不区分大小写(这反映了set在两个平台上的行为)

由于dict对于字符串键明显区分大小写,因此os.environ返回的值似乎只是作为dict的duck类型的。。。在

问题: 我应该在哪里/如何才能找到关于这种行为的明确答案?我宁愿有一个真实的答案,而不只是凭经验来确定:)

或者,是操作系统.getenv(…)使用更好的api?为什么?在

谢谢!在


Tags: 答案docs内容环境进程osubuntu方式
3条回答

平台独立性通常意味着所有平台变得更糟。因此,对于独立于平台的方式,您必须假设环境变量区分大小写,但决不要试图依赖于此(即,不要故意在不同大小写中创建同名变量),而是能够处理它。否则你可能会在非Windows上搞砸。在

至于哪些平台区分大小写,哪些不区分大小写。Windows不区分大小写,Unix之类的操作系统区分大小写,请参见:

对于异国情调的操作系统,你必须检查它的文档。在

希望有帮助。在

当文档没有指定行为并且您想自己发现答案时,可以查看源代码。在这种情况下,您可以通过http://svn.python.org/在线获取os.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
    # ...

在Windows上,您还可以看到实现中的差异-key.upper()代替了key

Linux系统:

^{pr2}$

窗口:

def __setitem__(self, key, item):
    putenv(key, item)
    self.data[key.upper()] = item

我很难理解,标准化一个或另一个不会导致严重违反最小惊人原则。在

在windows上,程序员习惯于不区分大小写。。。为什么一个只使用windows的程序员会对这件事挑剔呢?请注意,这里没有实现区分大小写的环境变量的可能方法,该选项根本不起作用。在

在linux世界中,ENVVAR和ENVVAR是两个不同的变量,您不可能在不隐藏信息的情况下将标准化为windows机制。在

在实现的版本中,强制开发人员为跨平台应用程序指定大写或小写。在windows上,case规范是不相关的,而且对于*nix,无论如何都必须这样做。在

相关问题 更多 >