Wenn Sie ein Befehlszeilen-Tool mit einem Befehlszeilen-Analyse-Tool in Python erstellen, werden die verwendeten Module grob in die folgenden drei unterteilt.
Da argparse eine Standardbibliothek ist, hat es den Vorteil, dass es ohne nachzudenken verwendet werden kann, und da click kein Standardmodul ist, ist es einfach, Dinge zu implementieren, die mit einer Standardbibliothek schwierig zu implementieren sind.
Da ich noch nie Feuer verwendet habe und in diesem Artikel keine Tools zur Befehlszeilenanalyse vorgestellt werden sollen, werde ich hier auf weitere Vergleiche und Erklärungen verzichten.
Die Methode zum Erstellen eines Unterbefehls mit click lautet wie folgt.
Wenn Sie ein Programm erstellen möchten, das tatsächlich funktioniert, sieht es wie folgt aus.
import click
@click.group()
def cli():
pass
@cli.command()
def initdb():
click.echo('Initialized the database')
@cli.command()
def dropdb():
click.echo('Dropped the database')
def main():
cli()
if __name__ == "__main__":
main()
$ python3 cli.py
Usage: cli.py [OPTIONS] COMMAND [ARGS]...
Options:
--help Show this message and exit.
Commands:
dropdb
initdb
$ python3 cli.py dropdb
Dropped the database
$ python3 cli.py dropdb --help
Usage: cli.py dropdb [OPTIONS]
Options:
--help Show this message and exit.
$ python3 cli.py initdb --help
Usage: cli.py initdb [OPTIONS]
Options:
--help Show this message and exit.
$ python3 cli.py initdb
Initialized the database
Das obige ist, wie es gemacht wird, wenn Programmbefehl <Optionen>
In letzter Zeit nimmt die Anzahl der Kubectl und dergleichen, die zwei Unterbefehle wie "kubectl get pods
Selbst wenn ich das Klickdokument lese, heißt es, wie ein Unterbefehl erstellt wird, nicht jedoch, wie ein Unterbefehl erstellt wird. Ich habe einige Dokumente und das Web durchsucht und fand die folgende Methode wunderschön, also habe ich sie gemacht.
.
├── modules
│ ├── sub1.py
│ └── sub2.py
└── cli.py
import click
from modules import sub1
from modules import sub2
@click.group()
def cli():
pass
def main():
cli.add_command(sub1.sub1cli)
cli.add_command(sub2.sub2cli)
cli()
if __name__ == "__main__":
main()
import click
@click.group()
def sub1cli():
pass
@sub1cli.command()
def sub1cmd1():
click.echo('sub1cmd1')
@sub1cli.command()
def sub1cmd2():
click.echo('sub1cmd2')
import click
@click.group()
def sub2cli():
pass
@sub2cli.command()
def sub2cmd1():
click.echo('sub2cmd1')
@sub2cli.command()
def sub2cmd2():
click.echo('sub2cmd2')
Auf diese Weise können Sie es erstellen, indem Sie click.group mit dem Befehl add_command von click hinzufügen.
$ python3 cli.py
Usage: cli.py [OPTIONS] COMMAND [ARGS]...
Options:
--help Show this message and exit.
Commands:
sub1cli
sub2cli
$ python3 cli.py sub1cli
Usage: cli.py sub1cli [OPTIONS] COMMAND [ARGS]...
Options:
--help Show this message and exit.
Commands:
sub1cmd1
sub1cmd2
$ python3 cli.py sub2cli
Usage: cli.py sub2cli [OPTIONS] COMMAND [ARGS]...
Options:
--help Show this message and exit.
Commands:
sub2cmd1
sub2cmd2
Recommended Posts