Вопрос

Я ищу способ проверить, существует ли раздел реестра в python.

Как я могу это сделать или какой код мне нужен, чтобы проверить, существует раздел реестра или нет?

Это было полезно?

Решение

Там появляется некоторая информация в предыдущем ответе Здесь .

Вы проверяете его существование, потому что вы хотите, чтобы ваша программа это прочитать?Чтобы проверить наличие их ключа, вы можете обернуть его в блоке try-except.Это предотвратит «гоночные условия», пытаясь прочитать ключ, в (маловероятно) событие, которое он изменен между проверкой на его существование и фактически читать ключ.Что-то вроде:

from _winreg import *

key_to_read = r'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall'

try:
    reg = ConnectRegistry(None, HKEY_LOCAL_MACHINE)
    k = OpenKey(reg, key_to_read)

    # do things with the key here ...

except:
    # do things to handle the exception here
.

Другие советы

Это более старый пост, но я почувствовал, что после некоторого аналогичного поиска решил добавить к нему некоторую информацию. winreg , из того, что я нашел, работает только в среде Windows. python-реестр около виллибаллентин может использоваться для этого кроссплатформенно и обладает множеством отличных опций при работе с реестром.

Если у вас есть целевой ключ, содержащий значения, которые вы хотите извлечь, вы можете перечислить их, выполнив следующие действия .... Сначала импортируйте модули (pip install python-registry).Это может не сработать, так как главная папка вставляется в библиотеки/sitepackages, убедитесь, что Реестр папка находится в корне сайта-пакеты.

from Registry import Registry         # Ensure Registry is in your libs/site-packages

Затем создайте свою функцию и убедитесь, что вы добавили в try: и exceptвойдите в вашу функцию, чтобы проверить, есть ли она там.

# Store internal Registry paths as variable, may make it easier, remove repeating yourself
time_zone = "ControlSet001\\Control\\TimeZoneInformation"

# STORE the path to your files if you plan on repeating this process.
<Path_To_reg_hive> = "C:\\Users\\Desktop\\Whatever_Folder\\SYSTEM"

def get_data():
    registry = Registry.Registry(<Path_To_reg_hive>)  # Explicitly, or use variable above
    try:
        key = registry.open(time_zone)  # Registry.Registry opens reg file, goes to the path (time_zone)
    except Registry.RegistryKeyNotFoundException:  # This error occurs if Path is not present
        print("Sorry Bud, no key values found at : " + time_zone)  # If not there, print a response

Вы можете составить список всего, что хотите проверить, и просто повторить его с помощью этого процесса, чтобы проверить несколько сразу или только по одному за раз.Вот рабочий пример:

from Registry import Registry

# These can be included directly into the function, or separated if you have several
system = "SYSTEM"   # or a Path, I have a SYSTEM hive file in my working environment folder
time_zone = "ControlSet001\\Control\\TimeZoneInformation123" # Path you want to check, added 123 so its not there

def get_data():
    registry = Registry.Registry(system)   # Explicitly, or use variable above
    try:
        key = registry.open(time_zone)       # Registry.Registry opens reg file, goes to the path (time_zone)
    except Registry.RegistryKeyNotFoundException:  # This error occurs if Path is not present
        print("Sorry Bud, no key values found at : " + time_zone)  # If not there, print a response

# key is identified above only to use later, such as....   for v in key.subkeys():    Do more stuff
get_data()

Который возвращает,

Sorry Bud, no key values found at : ControlSet001\Control\TimeZoneInformation123
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top