如何从Python设置Windows环境变量

问题描述 投票:0回答:2

我正在编写一个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 实例读取该值,则在计算机重新启动之前我看不到新值。

我还需要做什么才能使该值可供其他进程使用而无需重新启动?

python windows environment
2个回答
1
投票

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

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

1
投票

这就是我们在生产环境中在一台 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))

© www.soinside.com 2019 - 2024. All rights reserved.