Implementieren Sie einfach Unterbefehle mit Python-Klick

Einführung

In Qiitas Kommentar habe ich den eingeführten Klick überprüft und festgestellt, dass es einfach ist, Unterbefehle zu implementieren. Daher werde ich zusammenfassen, wie das geht. Ein Unterbefehl ist ein Befehl, bei dem das erste Argument des Skripts ein Befehl ist, der in Versionsverwaltungsbefehlen wie git und svn sowie in djangos Projektverwaltungsskript manage.py enthalten ist.

Umgebung

click ist kein Standard-Python-Paket, installieren Sie es also mit pip.

$ pip install click

Basic

Der Basiscode sieht folgendermaßen aus:

import click

@click.group(invoke_without_command=True)
@click.pass_context
def cli(ctx):
    if ctx.invoked_subcommand is None:
        print ctx.get_help()
    else:
        print('gonna invoke %s' % ctx.invoked_subcommand)


@cli.command(help='description 1')
@click.argument('target', required=False)
def subcommand1(target):
    print "sub command 1"

@cli.command(help='description 2')
@click.argument('target', required=False)
def subcommand2(target):
    print "sub command 2"

if __name__ == '__main__': cli()

cli ist die Startfunktion für alles, und Unterbefehl1 und Unterbefehl2 sind die Implementierungen der Unterbefehle. Geben Sie jede Beschreibung als Hilfevariable in @ cli.command ein. Im Folgenden wird der Inhalt der angezeigten Befehlshilfe angezeigt.

Usage: sample.py [OPTIONS] COMMAND [ARGS]...

Options:
  --help  Show this message and exit.

Commands:
  subcommand1  description 1
  subcommand2  description 2

Sie können sehen, dass die Unterbefehle 1 und 2 in den Befehlen registriert sind.

Tips

Verknüpfung erstellen

(Sub) Der Befehlsname ist möglicherweise zu lang und Sie möchten möglicherweise einen Verknüpfungsbefehl erstellen. Erweitern Sie in diesem Fall die Gruppenklasse und implementieren Sie sie.

...

class AliasedGroup(click.Group):
    def get_command(self, ctx, cmd_name):
        rv = click.Group.get_command(self, ctx, cmd_name)
        if rv is not None:
            return rv

        if cmd_name == 'shortcut':
            return click.Group.get_command(self, ctx, 'subcommand1')

        return None

@click.group(cls=AliasedGroup, invoke_without_command=True)
@click.pass_context
def cli(ctx):
...

Wie oben erwähnt, geben Sie die AliasedGroup an, die als cls-Argument von @ click.group implementiert ist. Dann

$ python ./sample.py shortcut
gonna invoke shortcut
sub command 1

Die Implementierung von sabcommand1 funktioniert wie oben.

Machen Sie eine normale Befehlsimplementierung zu einem Unterbefehl

Wenn Sie sich in mehrere Dateien aufteilen und Unterbefehle implementieren möchten, können Sie den Befehl implementieren und der Gruppe hinzufügen.

@click.group(invoke_without_command=True)
@click.pass_context
def handle(ctx):
    if ctx.invoked_subcommand is None:
        print ctx.get_help()
    else:
        print('gonna invoke %s' % ctx.invoked_subcommand)

@click.command()
def hoge():
    pass

handle.add_command(hoge)

von jetzt an

Sobald ich es versuche, möchte ich die Implementierung von verketteten Befehlen einführen.

Recommended Posts

Implementieren Sie einfach Unterbefehle mit Python-Klick
Machen Sie einfach einen Piepton mit Python
[python3] Implementieren Sie die Debug-Protokollausgabefunktion einfach mit Protokollierung und Klicken
Erstellen Sie einfach eine Python-Konsolenanwendung mit Click
Mit Python mit Kelch ganz einfach ohne Server
Implementieren Sie Unterbefehle mit Pythons Argparse
Einfache Handhabung von Listen mit Python + SQLite3
Mit Python 3 einfach auf Twitter posten
Implementieren Sie die inkrementelle ItemView-Suche einfach mit PySide
Laden Sie einfach mp3 / mp4 mit Python und youtube-dl herunter!
FizzBuzz in Python3
Scraping mit Python
Statistik mit Python
Scraping mit Python
Python mit Go
Twilio mit Python
Python-Klick-Tipps
In Python integrieren
Spielen Sie mit 2016-Python
AES256 mit Python
Getestet mit Python
Python beginnt mit ()
mit Syntax (Python)
Bingo mit Python
Zundokokiyoshi mit Python
Excel mit Python
Mikrocomputer mit Python
Mit Python besetzen
Sie können auch mit Python problemlos eine GUI erstellen
Erste Schritte mit AWS IoT in Python
Serielle Kommunikation mit Python
Zip, entpacken mit Python
Django 1.11 wurde mit Python3.6 gestartet
Primzahlbeurteilung mit Python
Python mit Eclipse + PyDev.
Socket-Kommunikation mit Python
Datenanalyse mit Python 2
Scraping in Python (Vorbereitung)
Versuchen Sie es mit Python.
Ich möchte Timeout einfach in Python implementieren
Mit Supervisor einfach zu dämonisieren
Python lernen mit ChemTHEATER 03
Sequentielle Suche mit Python
"Objektorientiert" mit Python gelernt
Führen Sie Python mit VBA aus
Umgang mit Yaml mit Python
Löse AtCoder 167 mit Python
Serielle Kommunikation mit Python
[Python] Verwenden Sie JSON mit Python
Python lernen mit ChemTHEATER 05-1
Implementieren Sie FReLU mit tf.keras
Lerne Python mit ChemTHEATER
1.1 Erste Schritte mit Python
Binarisierung mit OpenCV / Python
3. 3. KI-Programmierung mit Python
Ich habe versucht, Mine Sweeper auf dem Terminal mit Python zu implementieren
Kernel-Methode mit Python