python怎样设置环境变量_如何在Python中设置环境变量

如何在Python中设置环境变量

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

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

8个解决方案

490 votes

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

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

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

print os.environ["DEBUSSY"]

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

Sven Marnach answered 2019-01-04T09:45:50Z

89 votes

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

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

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)

Mark answered 2019-01-04T09:46:39Z

27 votes

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

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.data,有一点需要注意:

虽然子进程从父进程继承环境,但我最近遇到了一个问题并且想通了,如果在python脚本运行时有其他脚本更新环境,再次调用os.environ.data将不会反映最新的值。

摘自文档:

第一次导入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)

sisanared answered 2019-01-04T09:47:49Z

17 votes

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

然后做

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

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

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

some_value = os.environ["DEBUSSY"]

Jim Brissom answered 2019-01-04T09:48:31Z

16 votes

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

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

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

print os.environ["DEBUSSY"]

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

RejeeshChandran answered 2019-01-04T09:49:21Z

13 votes

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

ThiefMaster answered 2019-01-04T09:49:43Z

8 votes

您可以使用os.system字典访问您的环境变量。

现在,我遇到的一个问题是,如果我尝试使用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

Ricardo Alejos answered 2019-01-04T09:50:13Z

5 votes

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

您可能需要像此问题中描述的modified_environ上下文管理器来恢复环境变量。

经典用法:

with modified_environ(DEBUSSY="1"):

call_my_function()

Laurent LAPORTE answered 2019-01-04T09:50:49Z

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值