#coding=utf8
importosimportsysfrom subprocess importcheck_callif sys.hexversion > 0x03000000:importwinregelse:import_winreg as winregclassWin32Environment:"""Utility class to get/set windows environment variable"""
def __init__(self, scope):#assert scope in ('user', 'system')
self.scope =scopeif scope == 'user':
self.root=winreg.HKEY_CURRENT_USER
self.subkey= 'Environment'
else:
self.root=winreg.HKEY_LOCAL_MACHINE
self.subkey= r'SYSTEM\CurrentControlSet\Control\Session Manager\Environment'
defgetenv(self, name):
key=winreg.OpenKey(self.root, self.subkey, 0, winreg.KEY_READ)try:
value, _=winreg.QueryValueEx(key, name)exceptWindowsError:
value= ''
returnvaluedefsetenv(self, name, value):#Note: for 'system' scope, you must run this as Administrator
key =winreg.OpenKey(self.root, self.subkey, 0, winreg.KEY_ALL_ACCESS)
winreg.SetValueEx(key, name, 0, winreg.REG_EXPAND_SZ, value)
winreg.CloseKey(key)#For some strange reason, calling SendMessage from the current process
#doesn't propagate environment changes at all.
#TODO: handle CalledProcessError (for assert)
check_call('''\"%s" -c "import win32api, win32con;assert win32api.SendMessage(win32con.HWND_BROADCAST, win32con.WM_SETTINGCHANGE,0, 'Environment')"''' %sys.executable)defget_userenv(self, name):#Note: for 'system' scope, you must run this as Administrator
key =winreg.OpenKey(self.root, self.subkey, 0, winreg.KEY_ALL_ACCESS)
value,_=winreg.QueryValueEx(key, name)returnvaluedeftest_winreg():#e1 = Win32Environment(scope="system")
#print e1.getenv('PATH')
e2 = Win32Environment(scope="user")#e2.setenv('JAVA_HOME', os.path.expanduser('C:\\jdk1.8.0_91'))
#e2.setenv('CLASS_PATH', os.path.expanduser('%JAVA_HOME%\\lib;%JAVA_HOME%\\lib\\tools.jar'))
#e2.setenv('PATH', os.path.expanduser('%JAVA_HOME%\\jre\\bin;%JAVA_HOME%\\bin'))
e2.get_userenv("JAVA_HOME")
cmd="java version"e1= Win32Environment(scope="user")#print e1.get_userenv('JAVA_HOME')
if __name__=='__main__':
test_winreg()#if filename and os.path.isfile(filename):
#execfile(filename)