python - 如何在不访问注册表的情况下仅返回环境变量中的用户路径?

标签 python windows batch-file path environment-variables

这是我想要实现的: 我正在编写一个基于 Python 的软件,它需要将新目录附加到 Windows 环境变量中的 PATH。为此,我首先获取路径,然后修改字符串,最后使用 SETX 更新新的 PATH。

我的问题: 我尝试了三种方法来获取 PATH(使用 python 或 cmd),但它们都返回给我 USER PATH 和 SYSTEM PATH 的组合。这三种方法是:

os.environ['PATH']
os.system('echo %PATH%')
os.system('set PATH')

我不能接受用户路径和系统路径的组合,因为这会导致新用户路径太长,并被截断为 1024 个字符(微软的限制)。我读过一篇有完全相同问题的帖子。在这种情况下,问题似乎可以通过使用注册表来解决:http://stackoverflow.com/questions/13359082/windows-batch-select-only-user-variables .解决方案建议使用

reg query HKCU\Environment /v PATH

访问用户变量和系统变量分开的注册表。 但解决方案对我不起作用。当我在推荐线上运行它时,它会返回“访问被拒绝”。 因此,我正在寻找只返回环境变量中的用户路径而无需访问注册表的方法。谢谢。

最佳答案

import _winreg
import unicodedata
keyQ = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER, 'Environment', 0, _winreg.KEY_QUERY_VALUE)
path_old, _ = _winreg.QueryValueEx(keyQ, "PATH")
#the result is unicode, need to be converted
unicodedata.normalize('NFKD', path_old).encode('ascii','ignore')

虽然我说过我想要一个无需访问注册表的答案,但事实证明这是获取用户环境变量“PATH”的唯一方法。谢谢大家。

关于python - 如何在不访问注册表的情况下仅返回环境变量中的用户路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37444803/

相关文章:

python - 值错误 : could not convert string to float:

c++ - 如何在 Windows 10 中更改铃声 ("\a")

arrays - 批处理 : Parsing out file path from dynamic array

input - 如何将用户的字符串从批处理文件输入到环境变量中

python - 如何在读取 CSV 文件时将字符串值转换为整数值?

python - Pandas 中的复杂分组、排序和值过滤

javascript - 在 Django 中将字符串转换为 Javascript 中的字典列表

wpf - 无法在 Windows XP 中播放 MedialElement

Java-Swing 和 Windows 文本大小 : fix the size of components

string - BATch forfiles,带引号的命令