Can a python script persistently change a Windows environment variable? (elegantly)

后端 未结 5 1990
失恋的感觉
失恋的感觉 2020-12-16 02:34

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

5条回答
  •  星月不相逢
    2020-12-16 03:03

    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"
    

提交回复
热议问题