Que diriez-vous d'utiliser la méthode parser.parse_known_args()
et d'ajouter ensuite les arguments --lport
et --rport
comme arguments requis si --prox
est présent.
# ajoutez simplement --prox maintenant
non_int = argparse.ArgumentParser(description="Question stackoverflow",
usage="%(prog)s [-h] [--prox --lport port --rport port]")
non_int.add_argument('--prox', action='store_true',
help='Drapeau pour activer le proxy, nécessite des arguments supplémentaires lport et rport')
opts, rem_args = non_int.parse_known_args()
if opts.prox:
non_int.add_argument('--lport', required=True, type=int, help='Port d'écoute.')
non_int.add_argument('--rport', required=True, type=int, help='Port du proxy.')
# utilisez les options et l'espace de noms de la première analyse
non_int.parse_args(rem_args, namespace = opts)
Gardez également à l'esprit que vous pouvez fournir l'espace de noms opts
généré après la première analyse tout en analysant les arguments restants la deuxième fois. De cette façon, à la fin, après que toute l'analyse soit terminée, vous aurez un seul espace de noms avec toutes les options.
Inconvénients:
- Si
--prox
n'est pas présent, les deux autres options dépendantes ne sont même pas présentes dans l'espace de noms. Bien que, selon votre cas d'utilisation, si --prox
n'est pas présent, ce qui arrive aux autres options est sans importance.
- Besoin de modifier le message d'utilisation car l'analyseur ne connaît pas la structure complète
--lport
et --rport
n'apparaissent pas dans le message d'aide