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))