首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python环境案例感知-os.environ[.]

python环境案例感知-os.environ[.]
EN

Stack Overflow用户
提问于 2011-10-17 17:23:35
回答 3查看 5.7K关注 0票数 12

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

python os模块文档没有指定任何关于os.environ / os.getenv的区分大小写的内容。在我的ubuntu和win7开发框上进行实验时,我发现os.environ在linux上是区分大小写的,而在windows上则是不区分大小写的(这反映了set在两个平台上的行为)

由于dict显然是字符串键的大小写,所以os.environ返回的值似乎仅为dict类型.

问题:在哪里/如何能够找到关于这种行为的明确答案?我宁愿得到一个真正的答案,也不愿仅仅凭经验来确定:)

或者,os.getenv(.)一个更好的api使用?为什么?

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-10-17 17:30:55

当文档没有指定行为,并且希望自己发现答案时,可以查看源代码。在这种情况下,您可以在os.py网上获得http://svn.python.org/的源代码

  • (Python主干)
  • (Python 2.7)

守则中的评论说:

代码语言:javascript
复制
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:

代码语言:javascript
复制
def __setitem__(self, key, item):
    putenv(key, item)
    self.data[key] = item

Windows:

代码语言:javascript
复制
def __setitem__(self, key, item):
    putenv(key, item)
    self.data[key.upper()] = item
票数 14
EN

Stack Overflow用户

发布于 2011-10-17 17:32:46

平台独立性通常意味着所有平台的恶化。因此,对于平台无关的方式,您必须假设环境变量是区分大小写的,但绝不会试图依赖它(也就是说,不是有意地创建名称相同的变量),而是能够处理它。否则,你可能会搞砸在非窗口。

至于哪些平台区分大小写,哪些平台不-简单。Windows不区分大小写,类似Unix的OSs区分大小写,请参见:

  • 敏感
  • 不敏感

对于异域操作系统,您必须检查其文档。

希望能帮上忙。

票数 1
EN

Stack Overflow用户

发布于 2011-10-17 20:17:50

我很难理解,如何在一个或另一个的标准化不会带来严重违反原则的最小惊讶。

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

在linux世界中,ENVVAR和envvar是两个不同的变量,如果不隐藏信息,就无法标准化到windows机制。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7797269

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档