如何在Python中设置环境变量

断了今生、忘了曾经 提交于 2020-01-09 13:40:37

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

我需要在python脚本中设置一些环境变量,并且我希望从python调用的所有其他脚本(shell脚本)(将是子进程)来查看设置的环境变量。 该值为数字。

如果我做os.environ["DEBUSSY"] = 1 ,它抱怨说1必须是字符串。 我还想知道一旦设置好如何在python(在脚本的后半部分)中读取环境变量。


#1楼

您可以使用os.environ词典来访问环境变量。

现在,我遇到的一个问题是,如果我尝试使用os.system运行用于设置环境变量的批处理文件(在**。bat *文件中使用SET命令),则它实际上不会为python环境设置它们(但对于使用os.system函数创建的子进程)。 为了实际获取在python环境中设置的变量,我使用以下脚本:

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

#2楼

您应该将字符串值分配给环境变量。

os.environ["DEBUSSY"] = "1"

如果要读取或打印环境变量,请使用

print os.environ["DEBUSSY"]

此更改仅对分配了当前过程的当前过程有效,不会永久更改该值。 子进程将自动继承父进程的环境。


#3楼

os.environ行为类似于python字典,因此可以执行所有常见的字典操作。 除了其他答案中提到的getset操作之外,我们还可以简单地检查键是否存在

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

#4楼

当您使用环境变量(添加/修改/删除变量)时,一个好的做法是在函数完成时恢复以前的状态。

您可能需要类似此问题中描述的modified_environ上下文管理器之类的东西来还原环境变量。

经典用法:

with modified_environ(DEBUSSY="1"):
    call_my_function()

#5楼

设置变量:

使用键的项目分配方法:

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
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!