我需要在Python脚本中设置一些环境变量,我希望从Python调用的所有其他脚本都能看到环境变量的设置。
如果我这样做了,
os.environ["DEBUSSY"] = 1
它抱怨说1必须是一个字符串。
我还想知道如何读取Python中的环境变量(在脚本的后一部分),一旦我设置它。
我需要在Python脚本中设置一些环境变量,我希望从Python调用的所有其他脚本都能看到环境变量的设置。
如果我这样做了,
os.environ["DEBUSSY"] = 1
它抱怨说1必须是一个字符串。
我还想知道如何读取Python中的环境变量(在脚本的后一部分),一旦我设置它。
当前回答
你应该把字符串值赋给环境变量。
操作系统。environ["DEBUSSY"] = "1"
如果您想读取或打印环境变量,请使用
打印os.environ(“德彪西”)
此更改仅对分配该值的当前进程有效,不会永久更改该值。子进程将自动继承父进程的环境。
其他回答
延迟回答,可以帮助人们快速测试而无需更改代码。只需运行你的应用程序,附上环境变量,如下所示:
$ DEBUSSY=1 python3 api.py
你可以通过这种方式将env变量传递给任何脚本。
操作系统。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的一部分。变化 到环境做出来以后,这个时候都不体现出来 操作系统。Environ,除了修改os. Environ所做的更改。直接环境。
os. environment .data存储了所有的环境变量,是一个dict对象,包含了所有的环境值:
>>> type(os.environ.data) # changed to _data since v3.2 (refer comment below)
<type 'dict'>
你可以使用操作系统。Environ字典来访问环境变量。
现在,我遇到的一个问题是,如果我尝试使用操作系统。系统运行一个批处理文件来设置你的环境变量(在**.bat*文件中使用SET命令),它不会真正为你的python环境设置它们(但是为os. bat创建的子进程设置)。系统功能)。为了在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
如果我做os。environ["DEBUSSY"] = 1,它 抱怨说1必须是 字符串。
然后做
os.environ["DEBUSSY"] = "1"
我还想知道如何阅读 python中的环境变量(在 脚本的后面部分)一旦我设置 它。
只需使用os。environ["德彪西"],如在
some_value = os.environ["DEBUSSY"]
管理用户定义的环境变量的一种简单方法是将所有环境变量放在一个文本文件中,并在运行时加载它们。我们可以使用python-dotenv包来实现这一点,该包允许我们导入这些变量。该软件包可以通过以下方式安装:
pip install python-dotenv
默认情况下,该模块在当前目录中查找一个名为.env的文件。在这个文件中定义所有的变量,每行一个,如下所示:
DEBUSSY=1
PATH_TO_EXECUTABLE=/home/user_name/project/run.sh
然后将这些导入到您的环境中,如下所示:
from dotenv import load_dotenv
load_dotenv()
您可以将包含已定义变量的文件的路径指定为load_dotenv的可选参数。随后,可以通过os模块访问这些环境变量,如其他响应中所解释的那样。