3

我正在使用 ActivePython 2.5 来读取注册表中 pGina 所做的条目。具体来说,有关计算机上允许哪些 GID 的条目。通过 pGina 编辑的每台计算机的此信息可以定期更改,因此我希望我的 Python 脚本每次都能够检查这些值。

很容易。以下 Windows 命令将为我获取该信息:

reg query HKLM\Software\pGina\ldapauth\

...除了我用 Python 运行它时,我得到这个:

>>> import subprocess
>>> command = 'reg query HKLM\Software\pGina\ldapauth'
>>> ldapauth = subprocess.Popen(command, shell=False, stdout=subprocess.PIPE).communicate()[0]
ERROR: The system was unable to find the specified registry key or value.

因此,当我通过 Python 运行 'reg query HKLM\Software' 时,它会在 HK CU \Software 而不是 HKLM下吐出键和值的列表。

我以管理员身份运行 Python(通过使用 getpass.getuser() 确认),当我从批处理脚本运行相同的命令时,我在 HKLM 下得到了正确的列表。但是,当我从 Python 调用批处理脚本时,回到原来的 HKCU 结果。

所以,我有点卡住了。有没有人有任何见解?

编辑:正如稍后详述,我正在运行 Windows 7 64 位,并且我尝试了 _winreg 方法,包括 OpenKey 中可选的第四个“sam”参数。

4

2 回答 2

1

使用winreg。(winreg.OpenKeywinreg.Query*)。速度更快,无需运行 shell 命令,它甚至会以 OO 方式返回像 BINARY 这样棘手的注册表值类型。

#import _winreg as winreg # the 'correct' idiom for importing
from _winreg import *

with OpenKey(HKEY_LOCAL_MACHINE,'Software\pGina\ldapauth') as key:
    ... do something with QueryValue(key[,...])

winreg 做得很好,虽然界面很古怪,因为底层的 Windows 界面是。您可能很想为查找调用编写一个包装器,尤其是。如果像我一样,您编写一个生成器来获取子键的递归和枚举、键名的模式匹配、将搜索限制为某些允许的注册表值等等。

于 2011-08-15T23:55:24.867 回答
0

因此,在我的情况下,我仍然没有找到根本原因的解决方案。但是,我可以解决它。SYSTEM 在每次登录时运行的脚本现在会将相关密钥导出到可以轻松解析的文本文件中。

于 2011-08-18T20:57:58.083 回答