如何在Python中设置环境变量?
我需要在Python脚本中设置一些环境变量,并且希望所有从Python调用的其他脚本都能看到这些设置的环境变量。
如果我这样做,
os.environ["DEBUSSY"] = 1
它会报错,说1
必须是一个字符串。
我还想知道在我设置了环境变量后,如何在Python中读取这些环境变量(在脚本的后面部分)。
20 个回答
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
存储了所有的环境变量,它是一个字典对象,包含了所有的环境值:
>>> type(os.environ.data) # changed to _data since v3.2 (refer comment below)
<type 'dict'>
你可能需要考虑一些额外的方面来增强代码的稳健性;
当你把一个整数类型的变量存储为环境变量时,可以试试
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)
环境变量必须是字符串,所以你可以使用
import os
os.environ["DEBUSSY"] = "1"
来把变量 DEBUSSY
设置为字符串 1
。
想要在后面使用这个变量时,只需用
print(os.environ["DEBUSSY"])
就可以了。
子进程会自动继承父进程的环境变量,你不需要做任何特别的操作。