将帮助输出分类为 Python 单击
Categorize help output in Python Click
我正在尝试弄清楚如何对 Click 中的命令进行分类,以类似于 kubectl
在分隔命令时使用的结构。
例如,在 vanilla Click 帮助输出中我们有:
Usage: cli.py [OPTIONS] COMMAND [ARGS]...
A CLI tool
Options:
-h, --help Show this message and exit.
Commands:
command1 This is command1
command2 This is command2
command3 This is command3
command4 This is command4
相反,对我的用法来说,理想的做法是进行分隔以更好地对命令结构进行分类。
例如:
Usage: cli.py [OPTIONS] COMMAND [ARGS]...
A CLI tool
Options:
-h, --help Show this message and exit.
Specific Commands for X:
command1 This is command1
command2 This is command2
Specific Commands for Y:
command3 This is command3
command4 This is command4
Global Commands:
version Shows version
我正在使用最新的 Python 和最新版本的 Click 也为此。
我已经尝试研究挂接到各种单击 类 以更改此行为,但没有成功。
我最接近的是能够根据优先级构建命令,但我无法像上面的示例那样在逻辑上将它们分开。
如有任何帮助,我们将不胜感激。
我通过创建自己的 click.Group
:
实现了这一点
class OrderedGroup(click.Group):
def __init__(self, name=None, commands=None, **attrs):
super(OrderedGroup, self).__init__(name, commands, **attrs)
self.commands = commands or collections.OrderedDict()
def list_commands(self, ctx):
return self.commands
def format_commands(self, ctx, formatter):
super().get_usage(ctx)
formatter.write_paragraph()
with formatter.section("Specific Commands for X:"):
formatter.write_text(
f'{self.commands.get("command1").name}\t\t{self.commands.get("command1").get_short_help_str()}')
formatter.write_text(
f"{self.commands.get('command2').name}\t\t{self.commands.get('command2').get_short_help_str()}")
with formatter.section("Specific Commands for Y:"):
formatter.write_text(
f'{self.commands.get("command3").name}\t\t{self.commands.get("command3").get_short_help_str()}')
formatter.write_text(
f'{self.commands.get("command4").name}\t\t{self.commands.get("command4").get_short_help_str()}')
with formatter.section("Global Commands"):
formatter.write_text(
f'{self.commands.get("version").name}\t\t{self.commands.get("version").get_short_help_str()}')
并创建了 cli
组:
@click.group(cls=OrderedGroup)
def cli():
pass
这有帮助吗?
我正在尝试弄清楚如何对 Click 中的命令进行分类,以类似于 kubectl
在分隔命令时使用的结构。
例如,在 vanilla Click 帮助输出中我们有:
Usage: cli.py [OPTIONS] COMMAND [ARGS]...
A CLI tool
Options:
-h, --help Show this message and exit.
Commands:
command1 This is command1
command2 This is command2
command3 This is command3
command4 This is command4
相反,对我的用法来说,理想的做法是进行分隔以更好地对命令结构进行分类。
例如:
Usage: cli.py [OPTIONS] COMMAND [ARGS]...
A CLI tool
Options:
-h, --help Show this message and exit.
Specific Commands for X:
command1 This is command1
command2 This is command2
Specific Commands for Y:
command3 This is command3
command4 This is command4
Global Commands:
version Shows version
我正在使用最新的 Python 和最新版本的 Click 也为此。
我已经尝试研究挂接到各种单击 类 以更改此行为,但没有成功。 我最接近的是能够根据优先级构建命令,但我无法像上面的示例那样在逻辑上将它们分开。
如有任何帮助,我们将不胜感激。
我通过创建自己的 click.Group
:
class OrderedGroup(click.Group):
def __init__(self, name=None, commands=None, **attrs):
super(OrderedGroup, self).__init__(name, commands, **attrs)
self.commands = commands or collections.OrderedDict()
def list_commands(self, ctx):
return self.commands
def format_commands(self, ctx, formatter):
super().get_usage(ctx)
formatter.write_paragraph()
with formatter.section("Specific Commands for X:"):
formatter.write_text(
f'{self.commands.get("command1").name}\t\t{self.commands.get("command1").get_short_help_str()}')
formatter.write_text(
f"{self.commands.get('command2').name}\t\t{self.commands.get('command2').get_short_help_str()}")
with formatter.section("Specific Commands for Y:"):
formatter.write_text(
f'{self.commands.get("command3").name}\t\t{self.commands.get("command3").get_short_help_str()}')
formatter.write_text(
f'{self.commands.get("command4").name}\t\t{self.commands.get("command4").get_short_help_str()}')
with formatter.section("Global Commands"):
formatter.write_text(
f'{self.commands.get("version").name}\t\t{self.commands.get("version").get_short_help_str()}')
并创建了 cli
组:
@click.group(cls=OrderedGroup)
def cli():
pass
这有帮助吗?