os.environ在哪里初始化?

时间:2010-01-03 01:53:59

标签: python initialization std

使用此代码,输出了许多键,但我预计没有输出:

import os

for i in os.environ:
    print  i

这是来自os.py的代码:

try:
    environ
except NameError:
    environ = {}

os.environ从哪里获取其值?它在哪里初始化?

2 个答案:

答案 0 :(得分:7)

os模块首先从特定于平台的子模块(例如_nt_posix)导入所有名称,然后进行一点规范化。显然,特定于平台的子模块定义了environ名称(代表系统环境) (因为它通常是!!!),所以except子句在os.py中没有触发,os.environ只是它通常所谓的的丰富词典。

答案 1 :(得分:3)

来自os.py的引用代码是一个支持者。它说,如果没有人定义了environ变量,请创建一个,将空字典作为值。

environ确实存在,因为它已在第58行进一步导入:

from nt import *

如果您正在运行Windows,以及其他平台的类似平台特定导入。因此在实践中environ将始终存在,并且永远不会使用空的dict后备。

为什么还要提供一个支持呢?好吧,它在现实世界中是有用的,因为据我所知,核心Python发行版当前支持的所有平台都实现了正确的environ查找。然而,可能存在或者一直存在Python运行但没有环境变量的不寻常平台,并且在开发新平台时可能会有用,当环境变量之类的系统接口不是很多程序无法运行时写了。