Following on from my previous question, is it possible to make a Python script which persistently changes a Windows environment variable?
Changes to os.environ do n
My solution using win32api:
import os, sys, win32api, win32con
'''Usage: appendenv.py envvar data_to_append'''
def getenv_system(varname, default=None):
'''
Author: Denis Barmenkov
Copyright: this code is free, but if you want to use it,
please keep this multiline comment along with function source.
Thank you.
2006-01-28 15:30
'''
v = default
try:
rkey = win32api.RegOpenKey(win32con.HKEY_LOCAL_MACHINE, 'SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment')
try:
v = str(win32api.RegQueryValueEx(rkey, varname)[0])
v = win32api.ExpandEnvironmentStrings(v)
except:
pass
finally:
win32api.RegCloseKey(rkey)
return v
#My set function
def setenv_system(varname, value):
try:
rkey = win32api.RegOpenKeyEx(win32con.HKEY_LOCAL_MACHINE, 'SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment',0 ,win32con.KEY_WRITE)
try:
win32api.RegSetValueEx(rkey, varname, 0, win32con.REG_SZ, value)
return True
except Exception, (error):
pass
finally:
win32api.RegCloseKey(rkey)
return False
if len(sys.argv) == 3:
value = getenv_system(sys.argv[1])
if value:
setenv_system(sys.argv[1],value + ";" + sys.argv[2])
print "OK! %s = %s" % (sys.argv[1], getenv_system(sys.argv[1]))
else:
print "ERROR: No such environment variable. (%s)" % sys.argv[1]
else:
print "Usage: appendenv.py envvar data_to_append"