Question

Je cherche un moyen de vérifier si une clé de registre existe avec python.

Comment puis-je faire cela ou de quel code ai-je besoin pour vérifier si une clé de registre existe ou non ?

Était-ce utile?

La solution

Il semble y avoir des informations dans une réponse précédente ici.

Vérifiez-vous son existence parce que vous souhaitez que votre programme le lise ?Pour vérifier l'existence de leur clé, vous pouvez l'envelopper dans un try-except bloc.Cela empêchera les "conditions de concurrence" d'essayer de lire la clé, dans le cas (peu probable) où elle serait modifiée entre la vérification de son existence et la lecture réelle de la clé.Quelque chose comme:

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

Autres conseils

Il s'agit d'un article plus ancien, mais après quelques recherches similaires, j'ai pensé que j'allais y ajouter quelques informations. winreg , d'après ce que j'ai trouvé, ne fonctionne que sur un environnement Windows. registre python par williballenthin peut être utilisé pour faire cela sur plusieurs plates-formes et propose une multitude d'options intéressantes lorsque vous travaillez avec le registre.

Si vous disposez d'une clé cible contenant des valeurs que vous souhaitez extraire, vous pouvez les répertorier en suivant ces étapes... Tout d'abord, importez les modules (pip install python-registry).Cela peut ne pas fonctionner lorsque le dossier master est inséré dans les libs/sitepackages, assurez-vous que le Enregistrement Le dossier est à la racine des packages du site.

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

Créez ensuite votre fonction et assurez-vous d'ajouter un try: et exceptdans votre fonction pour vérifier si elle est là.

# 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

Vous pouvez faire un dict de tout ce que vous voulez vérifier et simplement le parcourir avec ce processus pour en vérifier plusieurs à la fois, ou juste un à la fois.Voici un exemple fonctionnel :

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()

Qui revient,

Sorry Bud, no key values found at : ControlSet001\Control\TimeZoneInformation123
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top