首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python winreg遍历子键

Python winreg遍历子键
EN

Stack Overflow用户
提问于 2013-01-16 10:32:52
回答 7查看 14.5K关注 0票数 9

使用下面的代码,我可以成功地从我的Windows7机器注册表配置单元"HKEY_LOCAL_MACHINE“中检索到5个子项。

代码语言:javascript
复制
from _winreg import *

try:
    i = 0
    while True:
        subkey = EnumKey(HKEY_LOCAL_MACHINE, i)
        print subkey
        i += 1
except WindowsError:
    pass

我的问题是,我如何枚举这些项下的键?我想最后列出SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\Unmanaged文件夹中的所有密钥,但我不知道如何才能一步步走到那里。

作为对第一条评论的回应,我在我的机器上运行了这段代码,虽然它没有出错,但也没有产生结果。

代码语言:javascript
复制
from _winreg import *

aReg = ConnectRegistry(None,HKEY_LOCAL_MACHINE)
aKey = OpenKey(aReg, r"SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\Unmanaged")
for i in range(1024):
    try:
        keyname = EnumKey(aKey, i)
        asubkey = OpenKey(aKey, keyname)
        val = QueryValueEx(asubkey, "Description")
        print val
    except WindowsError:
        break

regedit或reg查询显示该文件夹中有6个值,但我无法获得python脚本来显示这6个值。

EN

回答 7

Stack Overflow用户

发布于 2019-03-20 21:50:55

我只想添加一个更具蟒蛇风格的解决方案。

代码语言:javascript
复制
from _winreg import *
from contextlib import suppress
import itertools

def subkeys(path, hkey=HKEY_LOCAL_MACHINE, flags=0):
    with suppress(WindowsError), OpenKey(hkey, path, 0, KEY_READ|flags) as k:
        for i in itertools.count():
            yield EnumKey(k, i)

现在,您可以按预期访问密钥

代码语言:javascript
复制
for key in subkeys(r'path\to\your\key'):
    print key

对于缺少suppress()的python版本< 3.4,我建议将其添加到项目中:

代码语言:javascript
复制
from contextlib import contextmanager

@contextmanager
def suppress(*exceptions):
    try:
        yield
    except exceptions:
        pass

注意:如果您在读取某些值时遇到问题,则可能是从错误的注册表视图中读取的。将KEY_WOW64_64KEYKEY_WOW64_32KEY传递给flags参数)。在Python2.6中引入了使用OpenKey()作为上下文管理器。

票数 2
EN

Stack Overflow用户

发布于 2013-07-03 02:56:49

我没有相同的注册表项可供搜索,但以下代码将列出HKEY_LOCAL_MACHINE\Software中的所有子项。我认为如果您将keyVal字符串的值更改为您的目录,它将会起作用。

因为EnumKey将失败,所以try ... except阻塞是这样。我没有使用for循环,因为我不知道如何获得正确的aKey长度。

代码语言:javascript
复制
keyVal = r"Software"
aKey = OpenKey(HKEY_LOCAL_MACHINE, keyVal, 0, KEY_ALL_ACCESS)
try:
    i = 0
    while True:
        asubkey = EnumKey(aKey, i)
        print(asubkey)
        i += 1
except WindowsError:
    pass
票数 1
EN

Stack Overflow用户

发布于 2013-11-22 11:12:38

像这样的东西能工作吗?

代码语言:javascript
复制
import _winreg

def subkeys(key):
    i = 0
    while True:
        try:
            subkey = _winreg.EnumKey(key, i)
            yield subkey
            i+=1
        except WindowsError:
            break

def traverse_registry_tree(key=_winreg.HKEY_LOCAL_MACHINE, tabs=0):
    for k in subkeys(key):
        print '\t'*tabs + str(k)
        traverse_registry_tree(k, tabs+1)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14350517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档