协慌网

登录 贡献 社区

如何在 Python 中设置环境变量?

我需要在 Python 脚本中设置一些环境变量,并且我希望从 Python 调用的所有其他脚本来查看环境变量的设置。

如果我做,

os.environ["DEBUSSY"] = 1

它抱怨说1必须是字符串。

我还想知道设置后如何在 Python(在脚本的后半部分)中读取环境变量。

答案

环境变量必须是字符串,因此请使用

os.environ["DEBUSSY"] = "1"

将变量DEBUSSY设置为字符串1

以后要访问此变量,只需使用:

print(os.environ["DEBUSSY"])

子进程会自动继承父进程的环境变量 - 无需您执行任何特殊操作。

您可能需要考虑一些其他方面,以提高代码的健壮性。

当您将整数值的变量存储为环境变量时,请尝试

os.environ['DEBUSSY'] = str(myintvariable)

然后为了进行检索,请考虑为避免错误,您应该尝试

os.environ.get('DEBUSSY', 'Not Set')

可能用 “-1” 代替 “未设置”

所以,把所有这些放在一起

myintvariable = 1
os.environ['DEBUSSY'] = str(myintvariable)
strauss = int(os.environ.get('STRAUSS', '-1'))
# NB KeyError <=> strauss = os.environ['STRAUSS']
debussy = int(os.environ.get('DEBUSSY', '-1'))

print "%s %u, %s %u" % ('Strauss', strauss, 'Debussy', debussy)

os.environ行为类似于 python 字典,因此可以执行所有常见的字典操作。除了getset操作之外,我们还可以简单地检查键是否存在。键和值应存储为字符串

的 Python 3

对于 python 3,字典使用in关键字而不是has_key

>>> import os
>>> 'HOME' in os.environ  # Check an existing env. variable
True
...

的 Python 2

>>> import os
>>> os.environ.has_key('HOME')  # Check an existing env. variable
True
>>> os.environ.has_key('FOO')   # Check for a non existing variable
False
>>> os.environ['FOO'] = '1'     # Set a new env. variable (String value)
>>> os.environ.has_key('FOO')
True
>>> os.environ.get('FOO')       # Retrieve the value
'1'

os.environ需要注意一件事:

尽管子进程从父进程继承了环境,但是我最近遇到了一个问题,并弄清楚了,如果在运行 python 脚本时有其他脚本更新环境,那么再次os.environ不会反映最新值

文档摘录:

首次导入 os 模块时(通常是在 Python 启动期间作为处理 site.py 的一部分)捕获了此映射。此时间之后对环境所做的更改不会反映在 os.environ 中,除非直接通过修改 os.environ 进行更改。

os.environ.data是一个 dict 对象,它存储所有环境变量,其中包含所有环境值:

>>> type(os.environ.data)  # changed to _data since v3.2 (refer comment below)
<type 'dict'>