我需要在 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 字典,因此可以执行所有常见的字典操作。除了get
和set
操作之外,我们还可以简单地检查键是否存在。键和值应存储为字符串。
的 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'>