Lors de la création d'un outil de ligne de commande à l'aide d'un outil d'analyse de ligne de commande en python, les modules utilisés sont grossièrement divisés en trois.
Puisque argparse est une bibliothèque standard, il a l'avantage de pouvoir être utilisé sans réfléchir, et comme click n'est pas un module standard, il est facile d'implémenter des choses difficiles à implémenter avec une bibliothèque standard.
Comme je n'ai jamais utilisé le feu et que cet article n'est pas destiné à présenter des outils d'analyse de ligne de commande, j'omettreai ici d'autres comparaisons et explications.
La méthode de création d'une sous-commande à l'aide de click est la suivante.
Si vous souhaitez créer un programme qui fonctionne réellement, ce sera comme suit.
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
Ce qui précède est comment le faire lorsque commande de programme <options> '' Récemment, le nombre de kubectl etc. qui reçoivent deux sous-commandes telles que
kubectl get pods
Même si je lis le document de clic, il indique comment créer des sous-commandes, mais pas comment créer des sous-sous-commandes. J'ai cherché dans certains documents et sur le Web et j'ai pensé que la méthode suivante était belle, alors je l'ai faite.
.
├── 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')
De cette façon, vous pouvez le créer en ajoutant click.group avec la commande add_command de click.
$ 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