使用CommandCollection
此功能的缺点是它会合并您的命令,并且仅适用于命令组。imho更好的替代方法是add_command
用于获得相同的结果。
cli/ ├── __init__.py ├── cli.py ├── group1 │ ├── __init__.py │ ├── commands.py └── group2 ├── __init__.py └── commands.py
@H_419_11@每个子命令都有其自己的模块,这使使用更多帮助程序类和文件甚至管理复杂的实现变得异常简单。在每个模块中,
commands.py
文件均包含@click
注释。范例group2/commands.py
:import click @click.command() def version(): """Display the current version.""" click.echo(_read_version())
@H_419_11@如有必要,您可以轻松地在模块中创建更多类,并
import
在此处使用它们,从而使CLI拥有Python类和模块的全部功能。My
cli.py
是整个CLI的入口点:import click from .group1 import commands as group1 from .group2 import commands as group2 @click.group() def entry_point(): pass entry_point.add_command(group1.command_group) entry_point.add_command(group2.version)
@H_419_11@通过此设置,可以很容易地按关注点分离命令,并围绕它们构建可能需要的其他功能。到目前为止,它对我非常有用…
参考:http ://click.pocoo.org/6/quickstart/#nesting- commands
解决方法
我已经开发了一个大型点击应用程序,但是浏览不同的命令/子命令变得很困难。如何将命令组织到单独的文件中?是否可以将命令及其子命令组织到单独的类中?
这是一个我想如何分开的例子:
在里面
import click @click.group() @click.version_option() def cli(): pass #Entry Point
command_cloudflare.py
@cli.group() @click.pass_context def cloudflare(ctx): pass @cloudflare.group('zone') def cloudflare_zone(): pass @cloudflare_zone.command('add') @click.option('--jumpstart','-j',default=True) @click.option('--organization','-o',default='') @click.argument('url') @click.pass_obj @__cf_error_handler def cloudflare_zone_add(ctx,url,jumpstart,organization): pass @cloudflare.group('record') def cloudflare_record(): pass @cloudflare_record.command('add') @click.option('--ttl','-t') @click.argument('domain') @click.argument('name') @click.argument('type') @click.argument('content') @click.pass_obj @__cf_error_handler def cloudflare_record_add(ctx,domain,name,type,content,ttl): pass @cloudflare_record.command('edit') @click.option('--ttl','-t') @click.argument('domain') @click.argument('name') @click.argument('type') @click.argument('content') @click.pass_obj @__cf_error_handler def cloudflare_record_edit(ctx,domain): pass
command_uptimerobot.py
@cli.group() @click.pass_context def uptimerobot(ctx): pass @uptimerobot.command('add') @click.option('--alert','-a',default=True) @click.argument('name') @click.argument('url') @click.pass_obj def uptimerobot_add(ctx,alert): pass @uptimerobot.command('delete') @click.argument('names',nargs=-1,required=True) @click.pass_obj def uptimerobot_delete(ctx,names): pass
import click @click.command() def version(): """Display the current version.""" click.echo(_read_version())
@H_419_11@如有必要,您可以轻松地在模块中创建更多类,并
import
在此处使用它们,从而使CLI拥有Python类和模块的全部功能。My
cli.py
是整个CLI的入口点:import click from .group1 import commands as group1 from .group2 import commands as group2 @click.group() def entry_point(): pass entry_point.add_command(group1.command_group) entry_point.add_command(group2.version)
@H_419_11@通过此设置,可以很容易地按关注点分离命令,并围绕它们构建可能需要的其他功能。到目前为止,它对我非常有用…
参考:http ://click.pocoo.org/6/quickstart/#nesting- commands
解决方法
我已经开发了一个大型点击应用程序,但是浏览不同的命令/子命令变得很困难。如何将命令组织到单独的文件中?是否可以将命令及其子命令组织到单独的类中?
这是一个我想如何分开的例子:
在里面
import click @click.group() @click.version_option() def cli(): pass #Entry Point
command_cloudflare.py
@cli.group() @click.pass_context def cloudflare(ctx): pass @cloudflare.group('zone') def cloudflare_zone(): pass @cloudflare_zone.command('add') @click.option('--jumpstart','-j',default=True) @click.option('--organization','-o',default='') @click.argument('url') @click.pass_obj @__cf_error_handler def cloudflare_zone_add(ctx,url,jumpstart,organization): pass @cloudflare.group('record') def cloudflare_record(): pass @cloudflare_record.command('add') @click.option('--ttl','-t') @click.argument('domain') @click.argument('name') @click.argument('type') @click.argument('content') @click.pass_obj @__cf_error_handler def cloudflare_record_add(ctx,domain,name,type,content,ttl): pass @cloudflare_record.command('edit') @click.option('--ttl','-t') @click.argument('domain') @click.argument('name') @click.argument('type') @click.argument('content') @click.pass_obj @__cf_error_handler def cloudflare_record_edit(ctx,domain): pass
command_uptimerobot.py
@cli.group() @click.pass_context def uptimerobot(ctx): pass @uptimerobot.command('add') @click.option('--alert','-a',default=True) @click.argument('name') @click.argument('url') @click.pass_obj def uptimerobot_add(ctx,alert): pass @uptimerobot.command('delete') @click.argument('names',nargs=-1,required=True) @click.pass_obj def uptimerobot_delete(ctx,names): pass
import click from .group1 import commands as group1 from .group2 import commands as group2 @click.group() def entry_point(): pass entry_point.add_command(group1.command_group) entry_point.add_command(group2.version)
@H_419_11@通过此设置,可以很容易地按关注点分离命令,并围绕它们构建可能需要的其他功能。到目前为止,它对我非常有用…
参考:http ://click.pocoo.org/6/quickstart/#nesting- commands
解决方法
我已经开发了一个大型点击应用程序,但是浏览不同的命令/子命令变得很困难。如何将命令组织到单独的文件中?是否可以将命令及其子命令组织到单独的类中?
这是一个我想如何分开的例子:
在里面
import click @click.group() @click.version_option() def cli(): pass #Entry Point
command_cloudflare.py
@cli.group() @click.pass_context def cloudflare(ctx): pass @cloudflare.group('zone') def cloudflare_zone(): pass @cloudflare_zone.command('add') @click.option('--jumpstart','-j',default=True) @click.option('--organization','-o',default='') @click.argument('url') @click.pass_obj @__cf_error_handler def cloudflare_zone_add(ctx,url,jumpstart,organization): pass @cloudflare.group('record') def cloudflare_record(): pass @cloudflare_record.command('add') @click.option('--ttl','-t') @click.argument('domain') @click.argument('name') @click.argument('type') @click.argument('content') @click.pass_obj @__cf_error_handler def cloudflare_record_add(ctx,domain,name,type,content,ttl): pass @cloudflare_record.command('edit') @click.option('--ttl','-t') @click.argument('domain') @click.argument('name') @click.argument('type') @click.argument('content') @click.pass_obj @__cf_error_handler def cloudflare_record_edit(ctx,domain): pass
command_uptimerobot.py
@cli.group() @click.pass_context def uptimerobot(ctx): pass @uptimerobot.command('add') @click.option('--alert','-a',default=True) @click.argument('name') @click.argument('url') @click.pass_obj def uptimerobot_add(ctx,alert): pass @uptimerobot.command('delete') @click.argument('names',nargs=-1,required=True) @click.pass_obj def uptimerobot_delete(ctx,names): pass
import click
@click.group()
@click.version_option()
def cli():
pass #Entry Point
@cli.group()
@click.pass_context
def cloudflare(ctx):
pass
@cloudflare.group('zone')
def cloudflare_zone():
pass
@cloudflare_zone.command('add')
@click.option('--jumpstart','-j',default=True)
@click.option('--organization','-o',default='')
@click.argument('url')
@click.pass_obj
@__cf_error_handler
def cloudflare_zone_add(ctx,url,jumpstart,organization):
pass
@cloudflare.group('record')
def cloudflare_record():
pass
@cloudflare_record.command('add')
@click.option('--ttl','-t')
@click.argument('domain')
@click.argument('name')
@click.argument('type')
@click.argument('content')
@click.pass_obj
@__cf_error_handler
def cloudflare_record_add(ctx,domain,name,type,content,ttl):
pass
@cloudflare_record.command('edit')
@click.option('--ttl','-t')
@click.argument('domain')
@click.argument('name')
@click.argument('type')
@click.argument('content')
@click.pass_obj
@__cf_error_handler
def cloudflare_record_edit(ctx,domain):
pass
@cli.group()
@click.pass_context
def uptimerobot(ctx):
pass
@uptimerobot.command('add')
@click.option('--alert','-a',default=True)
@click.argument('name')
@click.argument('url')
@click.pass_obj
def uptimerobot_add(ctx,alert):
pass
@uptimerobot.command('delete')
@click.argument('names',nargs=-1,required=True)
@click.pass_obj
def uptimerobot_delete(ctx,names):
pass
每个子命令都有其自己的模块,这使使用更多帮助程序类和文件甚至管理复杂的实现变得异常简单。在每个模块中,commands.py
文件均包含@click
注释。范例group2/commands.py
:
如有必要,您可以轻松地在模块中创建更多类,并import
在此处使用它们,从而使CLI拥有Python类和模块的全部功能。
Mycli.py
是整个CLI的入口点:
通过此设置,可以很容易地按关注点分离命令,并围绕它们构建可能需要的其他功能。到目前为止,它对我非常有用…
参考:http ://click.pocoo.org/6/quickstart/#nesting- commands
我已经开发了一个大型点击应用程序,但是浏览不同的命令/子命令变得很困难。如何将命令组织到单独的文件中?是否可以将命令及其子命令组织到单独的类中?
这是一个我想如何分开的例子:
每个子命令都有其自己的模块,这使使用更多帮助程序类和文件甚至管理复杂的实现变得异常简单。在每个模块中,commands.py
文件均包含@click
注释。范例group2/commands.py
:
import click @click.command() def version(): """Display the current version.""" click.echo(_read_version())
@H_419_11@如有必要,您可以轻松地在模块中创建更多类,并
import
在此处使用它们,从而使CLI拥有Python类和模块的全部功能。My
cli.py
是整个CLI的入口点:import click from .group1 import commands as group1 from .group2 import commands as group2 @click.group() def entry_point(): pass entry_point.add_command(group1.command_group) entry_point.add_command(group2.version)
@H_419_11@通过此设置,可以很容易地按关注点分离命令,并围绕它们构建可能需要的其他功能。到目前为止,它对我非常有用…
参考:http ://click.pocoo.org/6/quickstart/#nesting- commands
解决方法
我已经开发了一个大型点击应用程序,但是浏览不同的命令/子命令变得很困难。如何将命令组织到单独的文件中?是否可以将命令及其子命令组织到单独的类中?
这是一个我想如何分开的例子:
在里面
import click @click.group() @click.version_option() def cli(): pass #Entry Point
command_cloudflare.py
@cli.group() @click.pass_context def cloudflare(ctx): pass @cloudflare.group('zone') def cloudflare_zone(): pass @cloudflare_zone.command('add') @click.option('--jumpstart','-j',default=True) @click.option('--organization','-o',default='') @click.argument('url') @click.pass_obj @__cf_error_handler def cloudflare_zone_add(ctx,url,jumpstart,organization): pass @cloudflare.group('record') def cloudflare_record(): pass @cloudflare_record.command('add') @click.option('--ttl','-t') @click.argument('domain') @click.argument('name') @click.argument('type') @click.argument('content') @click.pass_obj @__cf_error_handler def cloudflare_record_add(ctx,domain,name,type,content,ttl): pass @cloudflare_record.command('edit') @click.option('--ttl','-t') @click.argument('domain') @click.argument('name') @click.argument('type') @click.argument('content') @click.pass_obj @__cf_error_handler def cloudflare_record_edit(ctx,domain): pass
command_uptimerobot.py
@cli.group() @click.pass_context def uptimerobot(ctx): pass @uptimerobot.command('add') @click.option('--alert','-a',default=True) @click.argument('name') @click.argument('url') @click.pass_obj def uptimerobot_add(ctx,alert): pass @uptimerobot.command('delete') @click.argument('names',nargs=-1,required=True) @click.pass_obj def uptimerobot_delete(ctx,names): pass
import click from .group1 import commands as group1 from .group2 import commands as group2 @click.group() def entry_point(): pass entry_point.add_command(group1.command_group) entry_point.add_command(group2.version)
@H_419_11@通过此设置,可以很容易地按关注点分离命令,并围绕它们构建可能需要的其他功能。到目前为止,它对我非常有用…
参考:http ://click.pocoo.org/6/quickstart/#nesting- commands
解决方法
我已经开发了一个大型点击应用程序,但是浏览不同的命令/子命令变得很困难。如何将命令组织到单独的文件中?是否可以将命令及其子命令组织到单独的类中?
这是一个我想如何分开的例子:
在里面
import click @click.group() @click.version_option() def cli(): pass #Entry Point
command_cloudflare.py
@cli.group() @click.pass_context def cloudflare(ctx): pass @cloudflare.group('zone') def cloudflare_zone(): pass @cloudflare_zone.command('add') @click.option('--jumpstart','-j',default=True) @click.option('--organization','-o',default='') @click.argument('url') @click.pass_obj @__cf_error_handler def cloudflare_zone_add(ctx,url,jumpstart,organization): pass @cloudflare.group('record') def cloudflare_record(): pass @cloudflare_record.command('add') @click.option('--ttl','-t') @click.argument('domain') @click.argument('name') @click.argument('type') @click.argument('content') @click.pass_obj @__cf_error_handler def cloudflare_record_add(ctx,domain,name,type,content,ttl): pass @cloudflare_record.command('edit') @click.option('--ttl','-t') @click.argument('domain') @click.argument('name') @click.argument('type') @click.argument('content') @click.pass_obj @__cf_error_handler def cloudflare_record_edit(ctx,domain): pass
command_uptimerobot.py
@cli.group() @click.pass_context def uptimerobot(ctx): pass @uptimerobot.command('add') @click.option('--alert','-a',default=True) @click.argument('name') @click.argument('url') @click.pass_obj def uptimerobot_add(ctx,alert): pass @uptimerobot.command('delete') @click.argument('names',nargs=-1,required=True) @click.pass_obj def uptimerobot_delete(ctx,names): pass
import click
@click.group()
@click.version_option()
def cli():
pass #Entry Point
@cli.group()
@click.pass_context
def cloudflare(ctx):
pass
@cloudflare.group('zone')
def cloudflare_zone():
pass
@cloudflare_zone.command('add')
@click.option('--jumpstart','-j',default=True)
@click.option('--organization','-o',default='')
@click.argument('url')
@click.pass_obj
@__cf_error_handler
def cloudflare_zone_add(ctx,url,jumpstart,organization):
pass
@cloudflare.group('record')
def cloudflare_record():
pass
@cloudflare_record.command('add')
@click.option('--ttl','-t')
@click.argument('domain')
@click.argument('name')
@click.argument('type')
@click.argument('content')
@click.pass_obj
@__cf_error_handler
def cloudflare_record_add(ctx,domain,name,type,content,ttl):
pass
@cloudflare_record.command('edit')
@click.option('--ttl','-t')
@click.argument('domain')
@click.argument('name')
@click.argument('type')
@click.argument('content')
@click.pass_obj
@__cf_error_handler
def cloudflare_record_edit(ctx,domain):
pass
@cli.group()
@click.pass_context
def uptimerobot(ctx):
pass
@uptimerobot.command('add')
@click.option('--alert','-a',default=True)
@click.argument('name')
@click.argument('url')
@click.pass_obj
def uptimerobot_add(ctx,alert):
pass
@uptimerobot.command('delete')
@click.argument('names',nargs=-1,required=True)
@click.pass_obj
def uptimerobot_delete(ctx,names):
pass
如有必要,您可以轻松地在模块中创建更多类,并import
在此处使用它们,从而使CLI拥有Python类和模块的全部功能。
Mycli.py
是整个CLI的入口点:
通过此设置,可以很容易地按关注点分离命令,并围绕它们构建可能需要的其他功能。到目前为止,它对我非常有用…
参考:http ://click.pocoo.org/6/quickstart/#nesting- commands
我已经开发了一个大型点击应用程序,但是浏览不同的命令/子命令变得很困难。如何将命令组织到单独的文件中?是否可以将命令及其子命令组织到单独的类中?
这是一个我想如何分开的例子:
如有必要,您可以轻松地在模块中创建更多类,并import
在此处使用它们,从而使CLI拥有Python类和模块的全部功能。
Mycli.py
是整个CLI的入口点:
import click from .group1 import commands as group1 from .group2 import commands as group2 @click.group() def entry_point(): pass entry_point.add_command(group1.command_group) entry_point.add_command(group2.version)
@H_419_11@通过此设置,可以很容易地按关注点分离命令,并围绕它们构建可能需要的其他功能。到目前为止,它对我非常有用…
参考:http ://click.pocoo.org/6/quickstart/#nesting- commands
解决方法
我已经开发了一个大型点击应用程序,但是浏览不同的命令/子命令变得很困难。如何将命令组织到单独的文件中?是否可以将命令及其子命令组织到单独的类中?
这是一个我想如何分开的例子:
在里面
import click @click.group() @click.version_option() def cli(): pass #Entry Point
command_cloudflare.py
@cli.group() @click.pass_context def cloudflare(ctx): pass @cloudflare.group('zone') def cloudflare_zone(): pass @cloudflare_zone.command('add') @click.option('--jumpstart','-j',default=True) @click.option('--organization','-o',default='') @click.argument('url') @click.pass_obj @__cf_error_handler def cloudflare_zone_add(ctx,url,jumpstart,organization): pass @cloudflare.group('record') def cloudflare_record(): pass @cloudflare_record.command('add') @click.option('--ttl','-t') @click.argument('domain') @click.argument('name') @click.argument('type') @click.argument('content') @click.pass_obj @__cf_error_handler def cloudflare_record_add(ctx,domain,name,type,content,ttl): pass @cloudflare_record.command('edit') @click.option('--ttl','-t') @click.argument('domain') @click.argument('name') @click.argument('type') @click.argument('content') @click.pass_obj @__cf_error_handler def cloudflare_record_edit(ctx,domain): pass
command_uptimerobot.py
@cli.group() @click.pass_context def uptimerobot(ctx): pass @uptimerobot.command('add') @click.option('--alert','-a',default=True) @click.argument('name') @click.argument('url') @click.pass_obj def uptimerobot_add(ctx,alert): pass @uptimerobot.command('delete') @click.argument('names',nargs=-1,required=True) @click.pass_obj def uptimerobot_delete(ctx,names): pass
import click
@click.group()
@click.version_option()
def cli():
pass #Entry Point
@cli.group()
@click.pass_context
def cloudflare(ctx):
pass
@cloudflare.group('zone')
def cloudflare_zone():
pass
@cloudflare_zone.command('add')
@click.option('--jumpstart','-j',default=True)
@click.option('--organization','-o',default='')
@click.argument('url')
@click.pass_obj
@__cf_error_handler
def cloudflare_zone_add(ctx,url,jumpstart,organization):
pass
@cloudflare.group('record')
def cloudflare_record():
pass
@cloudflare_record.command('add')
@click.option('--ttl','-t')
@click.argument('domain')
@click.argument('name')
@click.argument('type')
@click.argument('content')
@click.pass_obj
@__cf_error_handler
def cloudflare_record_add(ctx,domain,name,type,content,ttl):
pass
@cloudflare_record.command('edit')
@click.option('--ttl','-t')
@click.argument('domain')
@click.argument('name')
@click.argument('type')
@click.argument('content')
@click.pass_obj
@__cf_error_handler
def cloudflare_record_edit(ctx,domain):
pass
@cli.group()
@click.pass_context
def uptimerobot(ctx):
pass
@uptimerobot.command('add')
@click.option('--alert','-a',default=True)
@click.argument('name')
@click.argument('url')
@click.pass_obj
def uptimerobot_add(ctx,alert):
pass
@uptimerobot.command('delete')
@click.argument('names',nargs=-1,required=True)
@click.pass_obj
def uptimerobot_delete(ctx,names):
pass
通过此设置,可以很容易地按关注点分离命令,并围绕它们构建可能需要的其他功能。到目前为止,它对我非常有用…
参考:http ://click.pocoo.org/6/quickstart/#nesting- commands
我已经开发了一个大型点击应用程序,但是浏览不同的命令/子命令变得很困难。如何将命令组织到单独的文件中?是否可以将命令及其子命令组织到单独的类中?
这是一个我想如何分开的例子:
通过此设置,可以很容易地按关注点分离命令,并围绕它们构建可能需要的其他功能。到目前为止,它对我非常有用…
参考:http ://click.pocoo.org/6/quickstart/#nesting- commands