您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何将每个包含一组子命令的Click命令拆分为多个文件?

如何将每个包含一组子命令的Click命令拆分为多个文件?

使用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类和模块的全部功能

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.command()
def version():
    """Display the current version."""
    click.echo(_read_version())
@H_419_11@

如有必要,您可以轻松地在模块中创建更多类,并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

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类和模块的全部功能

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

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

其他 2022/1/1 18:34:17 有440人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶