python操作环境变量(注册表)

os.environ

在python代码中导入python自带模块os,使用os.environ可以获取所有的环境变量信息,但是只是一个映射,也就是说对于environ的修改只是在当前代码中,不会去修改本机上真实的环境变量。
一、设置系统环境变量
1、os.environ['环境变量名称']='环境变量值' #其中key和value均为string类型
2、os.putenv('环境变量名称', '环境变量值')

二、获取系统环境变量
1、os.environ['环境变量名称']
2、os.getenv('环境变量名称')

  import os

  print(os.environ['PATH'])#获取的路径和os.getenv('PATH')获取的一样
  print(os.getenv('PATH'))
  os.putenv('aaa', 'bbb')
  os.environ['ccc'] = 'ddd'
  print(os.environ)//里面有ccc,但是没有aaa
  print(os.getenv('aaa'))//None

注意: 官网提醒

  • putenv()直接调用不会改变os.environ,因此最好修改os.environ
  • 在某些平台上,包括FreeBSD和Mac OS X,设置environ可能会导致内存泄漏。
修改本机真实环境变量

这就是我上一节说的操作注册表了,可以获取到注册表中的环境变量,并修改真实的环境

  • 系统环境变量:
winreg.HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment'
  • 用户环境变量
HKEY_CURRENT_USER\Environment

根据环境变量在注册表中的地址,分别可以进行修改,修改以后记得使用import ctypes,更新注册表,十七真正生效。
下面是一个使用的例子:

path_key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE,r'SYSTEM\CurrentControlSet\Control\Session Manager\Environment',0, winreg.KEY_ALL_ACCESS)
path_value = winreg.QueryValueEx(path_key, 'Path')
winreg.SetValueEx(path_key,"Path",0,winreg.REG_EXPAND_SZ, '新的环境变量')
refresh()
#修改注册表后,更新生效
def refresh():
  HWND_BROADCAST = 0xFFFF
  WM_SETTINGCHANGE = 0x1A

  SMTO_ABORTIFHUNG = 0x0002

  result = ctypes.c_long()
  SendMessageTimeoutW = ctypes.windll.user32.SendMessageTimeoutW
  SendMessageTimeoutW(HWND_BROADCAST, WM_SETTINGCHANGE, 0, u'Environment', SMTO_ABORTIFHUNG, 5000, ctypes.byref(result))

你可能感兴趣的:(python操作环境变量(注册表))