2010-10-20 24 views
6

Come eseguire il ciclo attraverso tutti i valori di una chiave del Registro di sistema di Windows utilizzando il modulo Python _winreg. Ho il codice che farà ciò che voglio, ma è per le sottochiavi della chiave di registro specificata.Loop through valori o chiave del Registro di sistema. _winreg Python


Ecco il codice:

from _winreg import * 
t = OpenKey(HKEY_CURRENT_USER, r"PATH TO KEY", 0, KEY_ALL_ACCESS) 

try: 
    i = 0 
    while True: 
     subkey = EnumValue(t, i) 
     print subkey 
     i += 1 
except WindowsError: 
    # WindowsError: [Errno 259] No more data is available  
    pass 

Oh, capito. Ma, se qualcuno conosce un altro modo per farlo, accetterò comunque quella risposta!

risposta

4

Non dovrebbe EnumValue essere di aiuto qui

# list all values for a key 
try: 
    count = 0 
    while 1: 
     name, value, type = _winreg.EnumValue(t, count) 
     print repr(name), 
     count = count + 1 
except WindowsError: 
    pass 
7

preferisco evitare l'errore invece di tuffarsi a destra in esso ...

Usa _winreg.QueryInfoKey per ottenere il numero di valori:

import _winreg 
key = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER, r'PATH\TO\KEY', 0, _winreg.KEY_READ) 

for i in xrange(0, _winreg.QueryInfoKey(key)[1]): 
    print _winreg.EnumValue(key, i) 

Per ottenere il numero di Chiavi, stesso metodo, indice diverso (seconda metà della domanda originale):

for i in xrange(0, _winreg.QueryInfoKey(key)[0]): 
    print _winreg.EnumKey(key, i) 

Nota: uso import invece di from ... import per rendere più esplicito in cui le funzioni e le variabili sono provenienti da. Rende più facile seguire il codice più tardi nella vita.

+2

il '-1' in xrange lascia fuori l'ultima chiave. Penso che dovrebbe essere semplicemente 'for i in xrange (_winreg.QueryInfoKey (chiave) [0]):' –

0

Per l'iterazione tramite chiavi e valori del registro, è necessario il metodo EnumKey() e EnumVlaue() dal modulo _winreg. Si noti che questi due metodi, prendono l'indice come argomento e forniranno la chiave (o il valore) solo per l'indice specificato. Pertanto, per ottenere tutte le chiavi (o valori) è necessario incrementare l'indice di uno e continuare fino a quando non si è verificato WindowsError.

This post potrebbe aiutarti per una comprensione dettagliata dello stesso. Il link Github per il codice può essere trovato nel post.