首页 文章

如何在Python中设置环境变量

提问于
浏览
398

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

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

8 回答

  • 5

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

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

    如果您想阅读或打印环境变量,请使用

    print os.environ["DEBUSSY"]

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

    enter image description here

  • 497

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

    您可能需要像question中描述的 modified_environ 上下文管理器那样恢复环境变量 .

    经典用法:

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

    您可能需要考虑代码稳健性的其他方面;

    当您将整数值变量存储为环境变量时,请尝试

    os.environ['DEBUSSY'] = str(myintvariable)
    

    然后进行检索,考虑到为了避免错误,你应该试试

    os.environ.get('DEBUSSY', 'Not Set')
    

    可能用'-1'代替'未设置'

    所以,把所有这些放在一起

    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)
    
  • 17

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

    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'
    

    Python 3

    对于python 3,字典使用in关键字而不是has_key

    >>> import os
    >>> 'HOME' in os.environ  # Check an existing env. variable
    True
    ...
    

    关于使用 os.environ ,有一点需要注意:

    虽然子进程从父进程继承环境,但我最近遇到了一个问题并且想通了,如果在python脚本运行时有其他脚本更新环境,请再次调用 os.environ will not reflect the latest values .

    摘录自docs

    第一次导入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'>
    
  • 16

    os.environ["DEBUSSY"] = '1' 怎么样?环境变量总是字符串 .

  • 89

    环境变量必须是字符串,所以使用

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

    将变量 DEBUSSY 设置为字符串 1 . 要稍后访问此变量,只需使用

    print os.environ["DEBUSSY"]
    

    子进程自动继承父进程的环境 - 您无需执行任何特殊操作 .

  • 28

    您可以使用 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
    
  • 8

    如果我做os.environ [“DEBUSSY”] = 1,它抱怨说1必须是字符串 .

    然后做

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

    我也想知道如何设置它后如何在python中读取环境变量(在脚本的后半部分) .

    只需使用 os.environ["DEBUSSY"] ,如

    some_value = os.environ["DEBUSSY"]
    

相关问题