2013-03-18 8 views
6

Sto scrivendo uno script daemon in Python e vorrei poter specificare le impostazioni in un file che il programma si aspetta di leggere (come i file .conf). La libreria standard ha i formati di file configparser e xdrlib, ma nessuno dei due sembra pietonico; il primo è uno standard Microsoft e il secondo uno standard Sun Microsystems.Qual è il metodo più pignolo per specificare un file di configurazione?

Potrei scrivere il mio, ma preferirei attenermi a uno standard ben noto e documentato, piuttosto che reinventare la ruota.

risposta

2

IMHO: Non toccare MAI il modulo ConfigParser, è obsoleto (legge: ovviamente non aggiornato) e presenta alcune stranezze. API per commenti? Dimenticalo! Accesso alla sezione DEFAULT? LOL! Ti stai chiedendo di non aver analizzato i campi di configurazione? Beh, indovina un po ': ConfigParser esegue iterazioni su tutti i tuoi file di configurazione e fallisce silenziosamente (sorvolare) per fare forse EVENTUALMENTE un condensato Exception-Trace su TUTTI gli errori. Non è facile scoprire quale errore appartiene a quale file. Nessuna sezione di configurazione nidificata ...

Piuttosto CSV quindi ConfigParser!

IMO: utilizzare Json per i file di configurazione. Una mappatura diretta molto flessibile tra le strutture di dati python e la rappresentazione JSON-String è possibile e ancora leggibile. Btw. lo scambio tra lingue diverse è abbastanza facile.

Ricci-Le parentesi graffe nel file non sono così belle, ma non puoi avere tutto! ;-)

+1

Questa era la stessa sensazione che ho avuto sul modulo ConfigParser. Stavo pensando di usare JSON (dal momento che è onnipresente almeno per quanto riguarda il web), ma quello era il problema, non l'ho mai visto usato per i file di configurazione, ed è più un formato di scambio di dati che una specifica di impostazione. Grazie! – Andy

+0

Non c'è bisogno di dire grazie, accettalo come una risposta onesta! ;) –

5

A meno che non ci siano esigenze particolarmente complesse, non c'è niente di sbagliato nell'usare il configparser. È un formato di file semplice e piatto che è facilmente comprensibile e familiare a molte persone. Se questo ti rovina davvero nel modo sbagliato, c'è sempre la possibilità di usare la configurazione JSON o YAML, ma questi sono formati un po 'più pesanti.

Una terza opzione popolare è usare Python per il file di configurazione. Questo ti dà più flessibilità ma aumenta anche le probabilità di introdurre strani bug modificando semplicemente il tuo file di configurazione.

1

Ho iniziato con configparser e optionsparser, ma per me il modo più fluido è solo quello di definire i dizionari in un file .py e importarlo come un modulo. È quindi possibile accedere direttamente alle configurazioni senza ulteriori elaborazioni.

# 
# example.py 
# 
config = { 
    "dialect" : "sqlite", 
    "driver" : "", 
    "database" : "testdb", 
    "host"  : "localhost", 
    "port"  : "0" 
} 

ovunque è necessario accedere solo fare:

from example import config 

print config["database"] 
Problemi correlati