How to set environment variables in Python
我需要在python脚本中设置一些环境变量,我希望从python(shell脚本)调用的所有其他脚本都是子进程,以查看设置的环境变量。值是一个数字。
如果我做
环境变量必须是字符串,因此请使用
1 | os.environ["DEBUSSY"] ="1" |
将变量
1 | print os.environ["DEBUSSY"] |
子进程自动继承父进程的环境——您不需要执行任何特殊操作。
您可能需要考虑一些代码健壮性的进一步方面;
将整数值变量存储为环境变量时,请尝试
1 | os.environ['DEBUSSY'] = str(myintvariable) |
然后为了检索,考虑到为了避免错误,您应该尝试
1 | os.environ.get('DEBUSSY', 'Not Set') |
可能将"-1"替换为"未设置"
所以,把这些放在一起
1 2 3 4 5 6 7 | 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) |
Python 2
1 2 3 4 5 6 7 8 9 10 | >>> 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' |
Python 3
对于python 3,字典使用in关键字而不是has_键
1 2 3 4 | >>> import os >>> 'HOME' in os.environ # Check an existing env. variable True ... |
使用
虽然子进程从父进程继承环境,但我最近遇到了一个问题,并发现如果在运行python脚本时有其他脚本在更新环境,那么再次调用
文件摘录:
This mapping is captured the first time the os module is imported,
typically during Python startup as part of processing site.py. Changes
to the environment made after this time are not reflected in
os.environ, except for changes made by modifying os.environ directly.
存储所有环境变量的
1 2 | >>> type(os.environ.data) # changed to _data since v3.2 (refer comment below) <type 'dict'> |
if i do os.environ["DEBUSSY"] = 1, it
complains saying that 1 has to be
string.
然后做
1 | os.environ["DEBUSSY"] ="1" |
I also want to know how to read the
environment variables in python(in the
later part of the script) once i set
it.
只需使用
1 | some_value = os.environ["DEBUSSY"] |
您应该将字符串值赋给环境变量。
如果要读取或打印环境变量,只需使用
此更改仅对分配它的当前进程有效,不会永久更改值。子进程将自动继承父进程的环境。
那
您可以使用
现在,我遇到的一个问题是,如果我试图使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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 |
当您使用环境变量(添加/修改/删除变量)时,一个好的做法是在函数完成时恢复以前的状态。
您可能需要像这个问题中描述的
经典用法:
1 2 | with modified_environ(DEBUSSY="1"): call_my_function() |
要设置变量:
使用键的项分配方法:
1 2 | import os os.environ['DEBUSSY'] = '1' #Environ Variable must be string not Int |
获取或检查它是否存在,
因为os.environ是一个实例,所以可以尝试对象方式。
方法1:
1 | os.environ.get('DEBUSSY') # this is error free method if not will return None by default |
将得到
方法2:
1 | os.environ['DEBUSSY'] # will throw an key error if not found! |
方法3:
1 | 'DEBUSSY' in os.environ # will return Boolean True/False |
方法4:
1 | os.environ.has_key('DEBUSSY') #last 2 methods are Boolean Return so can use for conditional statements |