Implementieren Sie Unterbefehle mit Pythons Argparse

Beschreibt die Verwendung von argparse zum Parsen von Unterbefehlen in Python 3. Ich bin jedoch nicht mit Python vertraut, daher gibt es möglicherweise einen besseren Weg. Ich möchte nur die Standardbibliothek verwenden, aber argparse ist zu hoch entwickelt und schwierig zu verwenden ...

Was du machen willst

Beispielcode

Die Punkte sind wie folgt.

git.py


#!/usr/bin/env python
# coding: utf-8

import argparse


#Eine Rückruffunktion, die die tatsächliche Verarbeitung eines Unterbefehls beschreibt

def command_add(args):
    print(args)

def command_commit(args):
    print(args)

def command_help(args):
    print(parser.parse_args([args.command, '--help']))

#Erstellen Sie einen Befehlszeilenparser
parser = argparse.ArgumentParser(description='Fake git command')
subparsers = parser.add_subparsers()

#Erstellen Sie einen Parser für den Befehl add
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)

#Erstellen Sie einen Parser für den Commit-Befehl
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)

#Erstellen Sie einen Parser für den Hilfebefehl
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)

#Analysieren Sie Befehlszeilenargumente und führen Sie die entsprechende Handlerfunktion aus
args = parser.parse_args()
if hasattr(args, 'handler'):
    args.handler(args)
else:
    #Holen Sie sich Hilfe für unbekannte Unterbefehle
    parser.print_help()

Ausführungsbeispiel

Wenn Sie keinen Unterbefehl angeben, wird die Hilfemeldung der obersten Ebene angezeigt.

$ 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

Wenn Sie einem Unterbefehl die Option "-h" hinzufügen, wird eine Hilfemeldung auf Unterbefehlsebene angezeigt. Dies liegt daran, dass Argparse einen guten Job macht.

$ 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

Gleiches gilt für die Verwendung des Unterbefehls "help". Das liegt daran, dass ich es selbst implementiert habe.

$ 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

Schließlich funktionieren auch die Unterbefehle "Hinzufügen" und "Festschreiben" wie erwartet.

$ 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')

Referenzinformationen

Recommended Posts

Implementieren Sie Unterbefehle mit Pythons Argparse
Implementieren Sie einfach Unterbefehle mit Python-Klick
Implementieren Sie FReLU mit tf.keras
Implementieren Sie PyTorch + GPU mit Docker
[Qt Designer] Implementieren Sie WebView mit PyQt5
Implementieren Sie eine Blockchain mit ca. 60 Zeilen
Sie können den asynchronen http-Client von Python mit Trio + httpx implementieren
Debuggen Sie die E-Mail-Übertragung mit Pythons smtpd.DebuggingServer
(Hinweis) Seien Sie vorsichtig mit Python Argparse
Sortieren Sie Namen mit dem Zufallsmodul von Python
Implementieren Sie Keras LSTM Feed Forward mit Numpy
Verwalten Sie Filter mit Pythons -m Option # 2
Versuchen Sie, Bitcoin mit Pythons Hashlib abzubauen
Seien Sie vorsichtig mit Pythons Append-Methode
Versuchen Sie, Pythons networkx mit AtCoder zu verwenden
Website-Scraping mit Beautiful Soup in Python
Implementieren Sie "Data Visualization Design # 2" mit matplotlib