如何在Python中设置环境variables
我需要在python脚本中设置一些环境variables,并且需要从python(shell脚本)调用的所有其他脚本,这些脚本将是subprocess,以查看环境variables集。 该值是一个数字。
如果我做os.environ["DEBUSSY"] = 1
,它抱怨说1
必须是string。 我也想知道如何在python中(在脚本的后面部分)读取环境variables。
环境variables必须是string,所以使用
os.environ["DEBUSSY"] = "1"
将variablesDEBUSSY
设置为string1
。 稍后要访问这个variables,只需使用
print os.environ["DEBUSSY"]
subprocess自动inheritance父进程的环境 – 不需要特别的操作。
您可能需要考虑一些其他方面的代码鲁棒性;
当你将一个整数值variables存储为环境variables时,请尝试
os.environ['DEBUSSY'] = str(myintvariable)
那么为了检索,考虑到为避免错误,你应该试试
os.environ.get('DEBUSSY', 'Not Set')
可能用'-1'代替'Not Set'
所以,把这一切放在一起
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 [“DEBUSSY”] = 1,它抱怨说1必须是string。
然后呢
os.environ["DEBUSSY"] = "1"
我也想知道如何在python(在脚本的后面的部分)读取环境variables,一旦我设置它。
只要使用os.environ["DEBUSSY"]
,如
some_value = os.environ["DEBUSSY"]
您应该将string值分配给环境variables。
os.environ["DEBUSSY"] = "1"
如果你想读取或打印环境variables只是使用
print os.environ["DEBUSSY"]
此更改仅对当前分配的过程有效,不会永久更改该值。 subprocess将自动inheritance父进程的环境。
怎么样os.environ["DEBUSSY"] = '1'
? 环境variables总是string。
您可以使用os.environ
字典访问您的环境variables。
现在,我遇到的一个问题是,如果我试图使用os.system
来运行一个batch file来设置你的环境variables(在一个**。bat *文件中使用SET命令),它不会真的为你的python环境(但对于使用os.system
函数创build的subprocess)。 要实际获取在Python环境中设置的variables,我使用这个脚本:
import re import system import os def setEnvBat(batFilePath, verbose = False): SetEnvPattern = re.compile("set (\w+)(?:=)(.*)$", re.MULTILINE) SetEnvFile = open(batFilePath, "r") SetEnvText = SetEnvFile.read() SetEnvMatchList = re.findall(SetEnvPattern, SetEnvText) for SetEnvMatch in SetEnvMatchList: VarName=SetEnvMatch[0] VarValue=SetEnvMatch[1] if verbose: print "%s=%s"%(VarName,VarValue) os.environ[VarName]=VarValue
当你使用环境variables(添加/修改/移除variables)时,一个好的做法是在函数完成时恢复以前的状态。
你可能需要像在这个问题中描述的modified_environ
上下文pipe理器那样来恢复环境variables。
经典用法:
with modified_environ(DEBUSSY="1"): call_my_function()
os.environ
行为就像一个Python字典,所以所有的常用字典操作都可以执行。 除了其他答案中提到的get
和set
操作之外,我们还可以简单地检查一个键是否存在:
>>> import os >>> os.environ.has_key('HOME') # Check an existing env. variable True >>> os.environ.has_key('FOO') # Check 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'
我最近碰到一个问题,想通了,如果你有其他的脚本在python脚本运行时更新环境,再次调用os.environ
不会反映最新的值 。
从文档摘录:
这个映射是第一次导入os模块时捕获的,通常是在Python启动时作为处理site.py的一部分。 这个时间之后对环境所做的更改不会反映在os.environ中,除非通过直接修改os.environ所做的更改。
存储所有环境variables的os.environ.data
是一个dict对象,它包含所有的环境值:
>>> type(os.environ.data) <type 'dict'>