Décrit comment utiliser argparse pour analyser les sous-commandes dans Python 3. Cependant, je ne suis pas familier avec Python, il y a donc peut-être un meilleur moyen. Je souhaite n'utiliser que la bibliothèque standard, mais argparse est trop sophistiqué et difficile à utiliser ...
git add
ou git commit
comme la commande git
git help
Les points sont les suivants.
parser
avec parser.add_subparsers ()
parser_〇〇.set_defaults (handler = function name)
pour transférer le traitement de chaque sous-commande vers la fonction handler.git.py
#!/usr/bin/env python
# coding: utf-8
import argparse
#Une fonction de rappel qui décrit le traitement réel d'une sous-commande
def command_add(args):
print(args)
def command_commit(args):
print(args)
def command_help(args):
print(parser.parse_args([args.command, '--help']))
#Créer un analyseur de ligne de commande
parser = argparse.ArgumentParser(description='Fake git command')
subparsers = parser.add_subparsers()
#Créer un analyseur pour la commande d'ajout
parser_add = subparsers.add_parser('add', help='see `add -h`')
parser_add.add_argument('-A', '--all', action='store_true', help='all files')
parser_add.set_defaults(handler=command_add)
#Créer un analyseur pour la commande de validation
parser_commit = subparsers.add_parser('commit', help='see `commit -h`')
parser_commit.add_argument('-m', metavar='msg', help='commit message')
parser_commit.set_defaults(handler=command_commit)
#Créer un analyseur pour la commande d'aide
parser_help = subparsers.add_parser('help', help='see `help -h`')
parser_help.add_argument('command', help='command name which help is shown')
parser_help.set_defaults(handler=command_help)
#Analyser les arguments de ligne de commande et exécuter la fonction de gestionnaire correspondante
args = parser.parse_args()
if hasattr(args, 'handler'):
args.handler(args)
else:
#Obtenez de l'aide pour les sous-commandes inconnues
parser.print_help()
Si vous ne spécifiez pas de sous-commande, le message d'aide de niveau supérieur s'affiche.
$ python git.py
usage: git.py [-h] {commit,add,help} ...
Fake git command
positional arguments:
{commit,add,help}
commit see `commit -h`
add see `add -h`
help see `help -h`
optional arguments:
-h, --help show this help message and exit
Si vous ajoutez l'option -h
à une sous-commande, un message d'aide au niveau de la sous-commande s'affiche. C'est parce qu'argparse fait du bon travail.
$ python git.py commit -h
usage: git.py commit [-h] [-m msg]
optional arguments:
-h, --help show this help message and exit
-m msg commit message
La même chose est vraie lors de l'utilisation de la sous-commande help
. C'est parce que je l'ai mis en œuvre moi-même.
$ python git.py help commit
usage: git.py commit [-h] [-m msg]
optional arguments:
-h, --help show this help message and exit
-m msg commit message
Enfin, les sous-commandes ʻaddet
commit` fonctionnent également comme prévu.
$ python git.py add
Namespace(all=False, handler=<function command_add at 0x102973c80>)
$ python git.py commit -m "message"
Namespace(handler=<function command_commit at 0x10510e7b8>, m='message')
Recommended Posts