如何从Python中设置Windows环境变量

frebpwbc  于 2023-11-21  发布在  Windows
关注(0)|答案(2)|浏览(155)

我正在写一个python程序,需要在一个持久化的用户环境变量中存储一个值。我相信这些值存储在注册表中。我已经尝试过使用winreg python模块这样做。

key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, 'Environment', access=winreg.KEY_WRITE)
winreg.SetValueEx(key, envVarName, 0, winreg.REG_SZ, envVarValue)
winreg.Close(key)

字符串
我可以通过使用注册表编辑器看到这个值已成功设置。但是如果我尝试从另一个python脚本或新的powershell示例读取该值,直到机器重新启动,我才能看到新值。
我还需要做什么来使这个值在不重新启动的情况下对其他进程可用?

50few1ms

50few1ms1#

看看这个答案,给出了一个可能的答案:https://stackoverflow.com/a/61757725/18300067

os.system("SETX {0} {1} /M".format("start", "test"))

字符串

kxe2p93d

kxe2p93d2#

这是我们在一个Windows服务器上的生产环境中的操作方式(代码简化):

import winreg

regdir = "Environment-test"
keyname = "Name-test"
keyvalue = "Value-test"

def setRegistry(regdir, keyname, keyvalue):
    with winreg.CreateKey(winreg.HKEY_CURRENT_USER, regdir) as _:
        with winreg.OpenKey(winreg.HKEY_CURRENT_USER, regdir, 0, winreg.KEY_WRITE) as writeRegistryDir:
            winreg.SetValueEx(writeRegistryDir, keyname, 0, winreg.REG_SZ, keyvalue)

def getRegistry(regdir, keyname):
    with winreg.OpenKey(winreg.HKEY_CURRENT_USER, regdir) as accessRegistryDir:
        value, _ = winreg.QueryValueEx(accessRegistryDir, keyname)
        return(value)

字符串
如果我首先使用以下方式设置值:

setRegistry(regdir, keyname, keyvalue)


然后检查它是否已创建:


的数据
现在我使用getRegistry并在管理模式下打开PS来运行它:

print(getRegistry(regdir, keyname))


相关问题