Dans le commentaire de Qiita, j'ai vérifié le clic qui a été introduit et j'ai trouvé qu'il était facile d'implémenter des sous-commandes, je vais donc résumer comment le faire. Une sous-commande est une commande dans laquelle le premier argument du script est une commande, qui se trouve dans les commandes de gestion de version telles que git et svn, et dans le script de gestion de projet de django manage.py.
click n'est pas un package python standard, donc installez-le avec pip.
$ pip install click
Le code de base ressemble à ceci:
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 est la fonction de départ pour tout, et subcommand1 et subcommand2 sont respectivement les implémentations des sous-commandes. Saisissez chaque description en tant que variable d'aide dans @ cli.command. Ce qui suit montre le contenu de l'aide sur les commandes affichée.
Usage: sample.py [OPTIONS] COMMAND [ARGS]...
Options:
--help Show this message and exit.
Commands:
subcommand1 description 1
subcommand2 description 2
Vous pouvez voir que les sous-commandes 1 et 2 sont enregistrées dans les commandes.
Tips
(Sous) Le nom de la commande est peut-être trop long et vous souhaiterez peut-être créer une commande de raccourci. Dans ce cas, étendez la classe Group et implémentez-la.
...
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):
...
Comme mentionné ci-dessus, spécifiez le AliasGroup implémenté en tant qu'argument cls de @ click.group. Puis
$ python ./sample.py shortcut
gonna invoke shortcut
sub command 1
L'implémentation de sabcommand1 fonctionne comme ci-dessus.
Si vous souhaitez diviser en plusieurs fichiers et implémenter des sous-commandes, vous pouvez implémenter la commande et l'ajouter au groupe.
@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)
Dès que je l'essayerai, j'aimerais vous présenter l'implémentation des commandes concaténées.
Recommended Posts