Esiste un modo normale di programmare uno script CLI che sovrascrive i parametri predefiniti in python

0

Se ho uno script che utilizza un file di configurazione (o predefinito per un file di configurazione generico) che chiama un altro modulo che ha bisogno del file di configurazione passato come parametro dovrei sempre

File 1 (lo script): / bin / runner

include doer.py

... initializing backup conf file
   backup_conf_file = "/etc/thing.conf"

... processing opts and args ...
   if ("backup_conf_file" in opts):
      backup_conf_file = arg



doer.copy_thing(backup_conf_file)

File 2 (il modulo): /lib/doer.py:

def copy_thing(backup_conf_file="/etc/thing.conf"):
   """Do stuff"""

Quindi, ovviamente ho fatto qualcosa di sbagliato sopra, ma qual è il modo giusto per farlo? Vorrei consentire di testare lo script con una diversa posizione del file di conf e vorrei consentire di testare il modulo con un percorso di file conf diverso.

Quello che mi piacerebbe davvero sarebbe una funzione in cui posso chiamare copy_thing con backup_conf_file=backup_conf_file or DEFAULT if None) , ma a meno che esista e non ne sappia nulla, cosa dovrei fare qui?

    
posta Peter Turner 19.12.2017 - 19:14
fonte

1 risposta

2

/lib/doer.py non dovrebbe conoscere il valore predefinito. Rimuovi il parametro predefinito e disponi di / bin / runner pass nel file di configurazione corretto da utilizzare.

Se opts è un dizionario, usa un codice come questo:

backup_conf_file = opts.get("backup_conf_file", "/etc/thing.conf")

Questo ti darà il valore nel dizionario o in /etc/thing.conf.

Se si tratta di argomenti della riga di comando, dovresti usare argparse o similiar che ti permetterà di impostare il valore predefinito per un parametro del file di configurazione.

    
risposta data 19.12.2017 - 19:24
fonte

Leggi altre domande sui tag