我须要在python脚本中设置一些环境变量,而且我但愿从python调用的全部其余脚本(shell脚本)(将是子进程)来查看设置的环境变量。 该值为数字。 python
若是我作os.environ["DEBUSSY"] = 1
,它抱怨说1
必须是字符串。 我还想知道一旦设置好如何在python(在脚本的后半部分)中读取环境变量。 shell
您可使用os.environ
词典来访问环境变量。 函数
如今,我遇到的一个问题是,若是我尝试使用os.system
运行用于设置环境变量的批处理文件(在**。bat *文件中使用SET命令),则它实际上不会为python环境设置它们(但对于使用os.system
函数建立的子进程)。 为了实际获取在python环境中设置的变量,我使用如下脚本: this
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
您应该将字符串值分配给环境变量。 spa
os.environ["DEBUSSY"] = "1"
code
若是要读取或打印环境变量,请使用 对象
print os.environ["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'>
当您使用环境变量(添加/修改/删除变量)时,一个好的作法是在函数完成时恢复之前的状态。
您可能须要相似此问题中描述的modified_environ
上下文管理器之类的东西来还原环境变量。
经典用法:
with modified_environ(DEBUSSY="1"): call_my_function()
设置变量:
使用键的项目分配方法:
import os os.environ['DEBUSSY'] = '1' #Environ Variable must be string not Int
获取或检查其是否存在,
因为os.environ是一个实例,所以您能够尝试对象方式。
方法1:
os.environ.get('DEBUSSY') # this is error free method if not will return None by default
将得到'1'
做为返回值
方法2:
os.environ['DEBUSSY'] # will throw an key error if not found!
方法3:
'DEBUSSY' in os.environ # will return Boolean True/False
方法4:
os.environ.has_key('DEBUSSY') #last 2 methods are Boolean Return so can use for conditional statements