如何在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字典,所以所有的常用字典操作都可以执行。 除了其他答案中提到的getset操作之外,我们还可以简单地检查一个键是否存在:

 >>> 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'>