跳转到主要内容

Pythonic对象化访问Windows注册表。

项目描述

regobj: Pythonic对象化访问Windows注册表

此模块围绕标准_winreg模块提供了一个薄包装器,允许更简单、更Pythonic地访问Windows注册表。

所有对注册表的访问都是通过Key对象完成的,这些对象(惊喜!)代表特定的注册表键。首先,已经为HKEY_*根键定义了预存在的Key对象,使用长名和短名

>>> HKEY_CURRENT_USER
<regobj Key 'HKEY_CURRENT_USER'>
>>> HKLM
<regobj Key 'HKEY_LOCAL_MACHINE'>

遍历和创建子键就像普通Python属性访问一样简单

>>> HKCU.Software.Microsoft.Windows
<regobj Key 'HKEY_CURRENT_USER\Software\Microsoft\Windows'>
>>> HKCU.Software.MyTests
Traceback (most recent call last):
    ...
AttributeError: subkey 'MyTests' does not exist
>>> HKCU.Software.MyTests = Key
>>> HKCU.Software.MyTests
<regobj Key 'HKEY_CURRENT_USER\Software\MyTests'>
>>> del HKCU.Software.MyTests

当然,对于不符合Python标识符命名的键,也有可以实现相同功能的方法。为了减少视觉杂乱,调用键对象是属性查找的缩写

>>> HKCU.Software.set_subkey("my-funny-key",Key)
>>> HKCU.Software.get_subkey("my-funny-key").SubKey = Key
>>> HKCU("Software\my-funny-key\SubKey")
<regobj Key 'HKEY_CURRENT_USER\Software\my-funny-key\SubKey'>
>>> HKCU.Software.del_subkey("my-funny-key")

可以通过标准项访问语法访问键中包含的个别值。返回的对象将是Value类的实例,具有‘name’、‘type’和‘data’属性

>>> HKCU.Software.Microsoft.Clock["iFormat"]
<regobj Value (iFormat,1,REG_SZ)>
>>> HKCU.Software.Microsoft.Clock["iFormat"].name
'iFormat'
>>> print(HKCU.Software.Microsoft.Clock["iFormat"].data)
1
>>> print(type(HKCU.Software.Microsoft.Clock["iFormat"].data) is type(b'1'.decode('utf8')))
True
>>> HKCU.Software.Microsoft.Clock["iFormat"].type
1
>>> HKCU.Software.Microsoft.Clock["notavalue"]
Traceback (most recent call last):
    ...
KeyError: "no such value: 'notavalue'"

迭代键生成所有包含的值,然后是所有包含的子键。还有方法可以分别迭代仅值和仅子键

>>> winK = HKCU.Software.Microsoft.Windows
>>> winK["testvalue"] = 42
>>> for obj in winK:
...   print(obj)
<regobj Value (testvalue,42,REG_DWORD)>
<regobj Key 'HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion'>
<regobj Key 'HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell'>
<regobj Key 'HKEY_CURRENT_USER\Software\Microsoft\Windows\ShellNoRoam'>
>>> [k.name for k in winK.subkeys()]
['CurrentVersion', 'Shell', 'ShellNoRoam']
>>> [v.data for v in winK.values()]
[42]
>>> del winK["testvalue"]

这些迭代器还提供了高效的__contains__和__len__方法实现,因此它们可以被用作以下方式

>>> "Shell" in HKCU.Software.Microsoft.Windows
True
>>> "Shell" in HKCU.Software.Microsoft.Windows.subkeys()
True
>>> "Shell" in HKCU.Software.Microsoft.Windows.values()
False
>>> len(HKCU.Software.Microsoft.Windows)
3
>>> len(HKCU.Software.Microsoft.Windows.values())
0

最后,在创建时指定键和值结构提供了强大的支持。最简单的情况已经演示过,其中将子键设置为Key类或None将创建它而不包含任何数据

>>> HKCU.Software.MyTests = None
>>> len(HKCU.Software.MyTests)
0

如果将子键分配给现有的键对象,则从该键复制数据到子键

>>> HKCU.Software.MyTests = HKCU.Software.Microsoft.Windows
>>> len(HKCU.Software.MyTests)
3
>>> [k.name for k in HKCU.Software.MyTests]
['CurrentVersion', 'Shell', 'ShellNoRoam']
>>> del HKCU.Software.MyTests

如果子键分配了字典,则该字典的结构将被复制到子键中。标量值变为键值,而嵌套字典将创建子键

>>> HKCU.Software.MyTests = {"val1":7, "stuff":{"a":1,"c":2,"e":3}}
>>> len(HKCU.Software.MyTests)
2
>>> [v.name for v in HKCU.Software.MyTests.values()]
['val1']
>>> [k.name for k in HKCU.Software.MyTests.subkeys()]
['stuff']
>>> len(HKCU.Software.MyTests.stuff)
3
>>> del HKCU.Software.MyTests

分配给子键的任何其他值将成为该键的默认值(即名为“”的值)

>>> HKCU.Software.MyTests = "dead parrot"
>>> print(HKCU.Software.MyTests[""].data)
dead parrot
>>> print(type(HKCU.Software.MyTests[""].data) is type(b'dead parrot'.decode('utf8')))
True
>>> del HKCU.Software.MyTests

就这样了 - 祝您享受!

项目详情


下载文件

下载您平台上的文件。如果您不确定选择哪一个,请了解更多关于安装包的信息。

源分布

regobj-0.2.2.tar.gz (7.2 kB 查看哈希值)

上传时间

由以下组织支持

AWSAWS云计算和安全赞助商DatadogDatadog监控FastlyFastlyCDNGoogleGoogle下载分析MicrosoftMicrosoftPSF赞助商PingdomPingdom监控SentrySentry错误日志StatusPageStatusPage状态页面