Implémenter des sous-commandes avec l'argparse de Python

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 ...

Chose que tu veux faire

Exemple de code

Les points sont les suivants.

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()

Exemple d'exécution

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 ʻaddetcommit` 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')

Informations de référence

Recommended Posts

Implémenter des sous-commandes avec l'argparse de Python
Implémentez facilement des sous-commandes avec python click
Implémenter FReLU avec tf.keras
Implémenter le GPU PyTorch + avec Docker
[Qt Designer] Implémenter WebView avec PyQt5
Implémentez la blockchain avec environ 60 lignes
N'hésitez pas à implémenter le client http asynchrone de Python avec Trio + httpx
Déboguer la transmission des e-mails avec smtpd.DebuggingServer de Python
(Note) Soyez prudent avec python argparse
Trier les noms avec le module aléatoire de Python
Implémenter Keras LSTM feed forward avec numpy
Gérez les filtres avec l'option -m n ° 2 de Python
Essayez de miner Bitcoin avec le hashlib de Python
Soyez prudent avec la méthode append de Python
Essayez d'utiliser le networkx de Python avec AtCoder
Grattage de site Web avec Beautiful Soup en Python
Implémentez "Data Visualization Design # 2" avec matplotlib