0

値の型について: http://docs.python.org/2/library/_winreg.html#value-types

_winreg.REG_BINARYを照会するにはどうすればよい'REG_BINARY'ですか?

私はそれを手動で行うことができます:

import _winreg
reg_type_str = {
    _winreg.REG_BINARY: 'REG_BINARY',
    _winreg.REG_DWORD: 'REG_DWORD',
    _winreg.REG_DWORD_LITTLE_ENDIAN: 'REG_DWORD_LITTLE_ENDIAN',
    _winreg.REG_DWORD_BIG_ENDIAN: 'REG_DWORD_BIG_ENDIAN',
    _winreg.REG_EXPAND_SZ: 'REG_EXPAND_SZ',
    _winreg.REG_LINK: 'REG_LINK',
    _winreg.REG_MULTI_SZ: 'REG_MULTI_SZ',
    _winreg.REG_NONE: 'REG_NONE',
    _winreg.REG_RESOURCE_LIST: 'REG_RESOURCE_LIST',
    _winreg.REG_FULL_RESOURCE_DESCRIPTOR: 'REG_FULL_RESOURCE_DESCRIPTOR',
    _winreg.REG_RESOURCE_REQUIREMENTS_LIST: 'REG_RESOURCE_REQUIREMENTS_LIST',
    _winreg.REG_SZ: 'REG_SZ',
}
reg_type_str.get(_winreg.REG_SZ)

確かにもっと良い方法がありますか?

私がやろうとしていること...

クエリの例:

reg_data, reg_type = _winreg.QueryValueEx(key, reg_value)
log.debug("Query: %s [%d:%s]" % (reg_data, reg_type, reg_type_str.get(reg_type)))

私はこのようなことができるはずだと思っています:

>>> for k, v in _winreg.__dict__:
...     if v == _winreg.REG_SZ:
...         print k

Traceback (most recent call last):
  File "<pyshell#468>", line 1, in <module>
    for k, v in _winreg.__dict__:
ValueError: too many values to unpack

もちろん、それは機能しませんが、たとえ機能したとしても、このメソッドを _winreg で使用すると問題が発生します。

>>> for v in _winreg.__dict__.itervalues():
...    if v == _winreg.REG_SZ:
...        print v

1
1
1
1
1
1
4

1 に答える 1

1

元の質問で提供されている手動の方法を使用して行う必要があるという結論に達しました。

これを回避する唯一の方法は、_winreg 開発者が関数を提供してくれる場合です。

于 2013-07-15T16:35:37.787 に答える