我需要在Python脚本中设置一些环境变量,我希望从Python调用的所有其他脚本都能看到环境变量的设置。

如果我这样做了,

os.environ["DEBUSSY"] = 1

它抱怨说1必须是一个字符串。

我还想知道如何读取Python中的环境变量(在脚本的后一部分),一旦我设置它。


当前回答

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

然后做

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

我还想知道如何阅读 python中的环境变量(在 脚本的后面部分)一旦我设置 它。

只需使用os。environ["德彪西"],如在

some_value = os.environ["DEBUSSY"]

其他回答

设置变量:

使用键的赋值方法:

import os    
os.environ['DEBUSSY'] = '1'  #Environ Variable must be string not Int

为了得到或检查它是否存在,

因为操作系统。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

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

您可能需要类似于这个问题中描述的modified_environ上下文管理器之类的东西来恢复环境变量。

经典的用法:

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

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

然后做

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

我还想知道如何阅读 python中的环境变量(在 脚本的后面部分)一旦我设置 它。

只需使用os。environ["德彪西"],如在

some_value = os.environ["DEBUSSY"]

应该注意的是,如果您试图将环境变量设置为bash求值,它将不会存储您所期望的内容。例子:

from os import environ

environ["JAVA_HOME"] = "$(/usr/libexec/java_home)"

这不会像在shell中那样求值,所以不是获取/Library/Java/JavaVirtualMachines/jdk1.8.0_144。你会得到$(/usr/libexec/java_home)的字面表达式。

确保在设置环境变量之前求值,如下所示:

from os import environ
from subprocess import Popen, PIPE

bash_variable = "$(/usr/libexec/java_home)"
capture = Popen(f"echo {bash_variable}", stdout=PIPE, shell=True)
std_out, std_err = capture.communicate()
return_code = capture.returncode

if return_code == 0:
    evaluated_env = std_out.decode().strip()
    environ["JAVA_HOME"] = evaluated_env
else:
    print(f"Error: Unable to find environment variable {bash_variable}")

那么os呢?environ["DEBUSSY"] = '1'?环境变量总是字符串。