Python操作系统环境变量

Python操作系统环境变量

使用os模块来操作系统环境变量

获取系统环境变量

Python获取环境变量可以使用到os模块, 且有两种方式获取环境变量。

1. os.environ

使用示例

import os

print(os.environ)

################  结果  ################ 

>>> environ({'ALLUSERSPROFILE': 'C:\\ProgramData', ....})

很显然, os.environ 得到的是一个dict对象, 因而联想取值方式为[ ]取值以及.get()取值。

import os

print(os.environ['GOPATH'])
print(os.environ.get('GOPATH'))

################  结果  ################ 

>>> E:\GO
>>> E:\GO

因此可知, 可以使用os.environ获取环境, 且有两种方法。

import os

os.environ[str(env_name)]

os.environ.get(str(env_name))
2. os.getenv()

查看其源码可知, 其就是对os.environ.get() 方法的封装

def getenv(key, default=None):
    """Get an environment variable, return None if it doesn't exist.
    The optional second argument can specify an alternate default.
    key, default and the result are str."""
    return environ.get(key, default)

使用示例

import os

print(os.getenv('GOPATH', default=None))

################  结果  ################ 

>>> E:\GO

因此可知, 通过 os.getenv() 也可以获取环境变量。

import os

print(os.getenv(str(env_name), default=None))
设置系统环境变量

显然使用Python设置环境变量依旧需要使用到os模块。

看官方文档是使用 os.environ.setdefault(key, value) 设置, 但是有一些小问题。

首先是使用Pycharm编辑器进行设置。

import os

os.environ.setdefault('TEST_ENV', 'This is a test.')  # 说是设置成功会返回并打印value值, 我这里没有显示。
print(os.getenv('TEST_ENV'))
print(os.environ.get('TEST_ENV'))

################  结果  ################ 

>>> This is a test.
>>> This is a test.

很好设置成功了, 去系统环境变量看看, 没有! 是的! 没有!!!

我们再去获取一下试试…

import os

print(os.getenv('TEST_ENV'))
print(os.environ.get('TEST_ENV'))

################  结果  ################ 

>>> None
>>> None

emmm… Why? 去看一眼源码。

def setdefault(self, k: _KT, default: _VT = ...) -> _VT: ...

看不懂…说的应该是设置key和value。

大胆假设一下, os.environ.setdefault(key, value) 生成的环境变量是伪环境变量, 在程序运行完毕后就销毁, 去验证一下吧。

# unicode environ
environ = _createenviron()
del _createenviron

上面是environ的源码, 一切都显而易见了, 最终还是太年轻, 后续深层源码就不去看了, 说到底就一次引用, 并且还使用del进行删除了(可能存在误解, 望大佬指正)。

注意: 刚刚看了多篇文章, 有说慎用os.environ.setdefault(key, value) 的。原因是可能与原有的值产生冲突, 从而设置不了新值。

可以通过以下两种方法设置(较为安全):

import os

os.environ[str(env_name)] = str(env_value)

os.putenv(str(env_name), str(env_value))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值