Bonjour !
Je viens de sortir de ma grotte et en face de moi j’ai trouvé un clavier, du coup j’ai attaqué un petit projet histoire de me dérouiller les mains. Je souhaite faire un programme en ligne de commande qui fonctionne avec des actions : c’est à dire comme le programme Git :
git add
est une action ;git commit
est une autre action ;git commit --amend
est la même action avec un paramètre ;git add --amend
n’a pas de sens et renvoie une erreur.
Le seul truc que j’ai trouvé qui se rapprocherait de ce que j’aimerais faire est (pour reprendre l’exemple de git) :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | import argparse def commit(is_amend): [...] def add(): [...] if __name__ == '__main__': p = argparse.ArgumentParser() p.add_argument('command', choices=['commit', 'add'], help='The action to execute') p.add_argument('--amend', action='store_true') args = p.parse_args() if args.command == 'commit': commit(args.amend) elif args.command == 'add': add() |
Mais en fait ça ne me convient pas du tout :
- L’aide du programme Git affiche en détail toutes les actions possible avec leur signification, tandis que mon programme affiche juste: *positional arguments:
{commit,add} The action to execute
, ce qui est un peu succint ; - on ne peut pas avoir une aide dédiée à une action, du style
git.py commit -h
) ; git.py add --amend
(ou mêmegit.py --amend
) est valide ici, alors qu’il ne devrait l’être qu’avec l’actioncommit
.
Bref, l’idée serait d’avoir un parseur général et un parseur pour chaque action.
J’ai farfouillé dans la doc de argparse et je n’ai rien trouvé qui correspondait vraiment à ce fonctionnement…
Il faut que je recode un truc pour ça où il y a un truc qui existe déjà, voir c’est possible avec argparse ?
Merci
+0
-0