我需要以独立于平台的方式访问进程的环境块。
python os模块文档没有指定任何关于os.environ / os.getenv的区分大小写的内容。在我的ubuntu和win7开发框上进行实验时,我发现os.environ在linux上是区分大小写的,而在windows上则是不区分大小写的(这反映了set在两个平台上的行为)
由于dict显然是字符串键的大小写,所以os.environ返回的值似乎仅为dict类型.
问题:在哪里/如何能够找到关于这种行为的明确答案?我宁愿得到一个真正的答案,也不愿仅仅凭经验来确定:)
或者,os.getenv(.)一个更好的api使用?为什么?
谢谢!
发布于 2011-10-17 17:30:55
当文档没有指定行为,并且希望自己发现答案时,可以查看源代码。在这种情况下,您可以在os.py网上获得http://svn.python.org/的源代码
守则中的评论说:
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:
def __setitem__(self, key, item):
putenv(key, item)
self.data[key] = itemWindows:
def __setitem__(self, key, item):
putenv(key, item)
self.data[key.upper()] = item发布于 2011-10-17 17:32:46
平台独立性通常意味着所有平台的恶化。因此,对于平台无关的方式,您必须假设环境变量是区分大小写的,但绝不会试图依赖它(也就是说,不是有意地创建名称相同的变量),而是能够处理它。否则,你可能会搞砸在非窗口。
至于哪些平台区分大小写,哪些平台不-简单。Windows不区分大小写,类似Unix的OSs区分大小写,请参见:
对于异域操作系统,您必须检查其文档。
希望能帮上忙。
发布于 2011-10-17 20:17:50
我很难理解,如何在一个或另一个的标准化不会带来严重违反原则的最小惊讶。
在windows上,程序员习惯于对大小写不敏感.为什么只有windows的程序员会对此挑剔呢?请注意,在这里不可能实现区分大小写的环境变量,该选项根本不起作用。
在linux世界中,ENVVAR和envvar是两个不同的变量,如果不隐藏信息,就无法标准化到windows机制。
在实现的版本中,您强制开发人员为跨平台应用程序指定大小写。在windows上,用例规范是不相关的,无论如何,您都必须在*nix上这样做。
https://stackoverflow.com/questions/7797269
复制相似问题