c’est pratique à un détail près, pour lequel je n’ai pas trouvé d’info:
ne serait-il pas possible de désigner un paramètre par défaut en cas d’incohérence dans un groupe d’options incompatibles?
Actuellement, je gère ça dans la suite du programme, mais l’option « cuivre » -Cu est parente des options « nuances de cuivre » ( -Cu_NF -Cu_a1 -Cu_b1). En cas d’incohérence sur les options « enfants », au travers des méthodes incluse dans la librairie « arparse », est-il possible de donner une instruction au programme pour qu’il exécute l’option « parente » ou là, le programme vas demander « ok, c’est du cuivre mais lequel? »
Désolé, sur ce 2e exemple, je suis pas sur d’être très clair…
si j’ai bien compris le module argparse se contente de parser la ligne de commande… et de contrôler la cohérence des paramètres.
en clair le premier cas empêche la saisie de paramètres incompatibles mais la logique c’est que suivant le paramètre sélectionner on va obligatoirement le tester et en fonction du choix, déterminer un traitement ( donc c’est lors du test qu’on choisira une option par défaut ou d’arrêter le traitement )
l’autre possibilité étant qu’en l’absence d’argument -lcd on traite les ecr …
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import argparse
def do_stdout():
# do everything that is required to support stdout
print("stdout!")
return
def do_csv():
# do everything that is required to support CSV file
print("csv!")
return
def do_text():
# do everything that is required to support TXT file
print("text!")
return
parser = argparse.ArgumentParser()
group = parser.add_mutually_exclusive_group()
group.add_argument('-s', '--stdout', action='store_const', dest='type', const=do_stdout)
group.add_argument('-c', '--csv', action='store_const', dest='type', const=do_csv)
group.add_argument('-t', '--txt', action='store_const', dest='type', const=do_text)
parser.set_defaults(type=do_stdout)
# pour forcer l’exécution en cas d'erreur
# pas recommandé mais ça marche !
try :
args = parser.parse_args()
args.type()
except:
print ("erreur ! stdout forcé par défaut")
do_stdout()
pour le deuxième cas si tu supprimes la première ligne tu n’as plus le choix qu’entre les options utiles ( d’où l’importance de la clarté de ce qui sort en « help »)
Au contraire, la première ligne a son utilité:
Si tu choisis l’option « -Cu » le programme te donne quelques indices pour choisir la nuance à utiliser.