用Python Shell设置或获取环境变量的方法:os.environ and os.putenv in Python

背景

简单来说是整个工程有一个启动文件,需要用一个const.py文件中的参数来控制运行环境,这在Pycharm这些IDE里面运行当然没问题,因为编译器的运行环境是一个虚拟的env。我在Jenkins的机器上运行时,无法通过单独的case.py文件修改const.py文件的值,使用global变量也不行,故采用设置环境变量的方法。

实施

设置系统环境变量

  • os.environ['环境变量名称']='环境变量值' #其中key和value均为string类型
    
  • os.putenv('环境变量名称', '环境变量值')
    

获取系统环境变量

  • os.environ['环境变量名称']
    
  • os.getenv('环境变量名称')
    

踩坑

以上方法,推荐用os.environ,因为使用os.putenv()并不会真正改变os.environ字典里面的环境变量,即某些平台无效(比如MacOS,我就是在这里一直设置不成功),但是使用os.environ有一个潜在的隐患:在一些平台上,包括FreeBSD和Mac OS X,修改environ会导致内存泄露。详情见Python API。

我们设置的环境变量只存在于当前的python shell中(设置成功后用print os.environ['环境变量名称']或printos.getenv('环境变量名称') 查看)。也就是说,比如Windows环境下,在”我的电脑”——“属性”——“高级系统设置”——”高级”——”环境变量”中找不到刚才设置成功的环境变量。为什么会这样呢,如何用Python真正设置环境变量?

如果你所在的开发环境是windows的操作系统,import _winreg模块将环境变量写入注册表,再广播WM_SETTINGCHANGE消息,可参考实例;如果你所在的开发环境是Linux的操作系统,使用linux命令,在bash_profile文件中添加环境变量后,使其生效即可。

参考文章

os.environ and os.putenv in Python

点赞