Il n’est pas évident de trouver une manière simple de gérer les paramètres passés à un script. Comme il existe un nombre incalculable de modules pour ce faire, j’ai évidemment fait le mien, car la gestion des options est visiblement affaire de goûts.
Ce que je propose s’appuie sur le module getopt, qui parse la ligne de commande, mais dont l’API est à chier (pour dire les choses clairement).
Mon idée de départ était de faire quelque chose de simple à utiliser, même si le prix à payer est le manque d’une certaine flexibilité.
Par défaut, le système utilise le module ConfigParser pour gérer des fichiers de configurations. Le nom du fichier de configuration utilisé est le nom de l’application (sans le .py, au besoin). La priorité est donné 1) à la ligne de commande, 2) au fichier /.application.conf, 3) au fichier ./application.conf. Les clefs sont les noms longs des options définies. Il y a un petit manque de gestion élégante des sections...
Une version (peut-être plus à jour) est utilisé par le logiciel Strip-It, dans le fichier stripit.py.
if __name__=="__main__" :# description générale usage = """Aide à l’export et au téléchargement pour StripIt. \tCe script va exporter un ou plusieurs fichiers SVG au format PNG, en préservant les métadonnées ; \tpuis télécharger le tout sur un serveur FTP."""
# l’objet qui va tout gérer
oo = Options( sys.argv, usage )
# déclaration des différentes options # courte longue description valeur par défaut (ou false si ne prend pas de paramètre) oo.add( ’u’, ’user’, ’Login FTP’, ’anonymous’ ) oo.add( ’P’, ’pass’, ’Mot de passe FTP’, ’’ ) oo.add( ’v’, ’verbose’, "Afficher plus d’informations", False ) oo.add( ’h’, ’help’, "Ce message d’aide", False )
# cuisine interne
args = oo.parse()
# on vérifie la valeur de l’option if oo.get(’verbose’) : # affiche l’état des différents paramètres et la provenance de leur configuration oo.print_state()
if oo.get(’help’) : # le message d’aide
oo.print_usage() sys.exit()
# parcours les arguments (= ce qui est passé en ligne de commande sans être une option) while args : f = args.pop()
if oo.get(’verbose’) : print "Processing %s :" % os.path.basename( f )