Alconna TemplateCommand - RF-Tar-Railt/Cesloi Wiki

TemplateCommand

TemplateCommandAlconna的命令体基类,用来规范命令所需参数

TemplateCommand规定一个命令体需要如下参数:

Action

TemplateCommand 可以传入一个Action, 这个Action应该是Callable的function, 或者是ArgAction类的实例

Action会在Command被成功匹配,或CommandArgs被全部匹配完毕后执行,如

Option("test", actions=lambda x: True)  # 此时会使结果为{"test": True} 而不是 {"test": Ellipsis}

Option("test", Args["num":int], action=lambda x: x + 1)  # 此时会使结果为{"test": {"num": x+1}} 而不是 {"test": {"num": x}}

Args有传入, 则Action 可以传入的参数的个数应该与TemplateCommandArgs给出的参数个数一致

Option("--foo", Args["bar":int], action=lambda x: 2*x)  # 合法
Option("--foo", Args["bar":str, "bar1":bool], action=lambda x: x.strip())  # 非法

另外Alconna提供了预制的action, 你可以在alconna.actions里找到:

Option

Option 是基础的选项类

option = Option("name", key1=value1, key2=value2)

option = Option("name", args=Args(key1=value1, key2=value2))

Option 需要两类参数

当只填写了name时,Alconna会默认该Option的参数为 Ellipsis (即"...")

args的格式为key-value, key是作为该参数的说明与查找的,在指令中不需要输入; value支持一般字符串、正则表达式与元素类型

Alias

Option 可以传入alias参数,作为该option的选项别名

构造Option时, 以下两种方式是可用的:

Option("--time", alias="-t", args=Args["sec":int])

Option("--time| -t", args=Args["sec":int])

解析时, --time 30-t 30都将被成功解析

Subcommand

Subcommand 比起 Option 更类似于一个单独的Command, 当然, 没有命令头

subcommand = Subcommand("name", Option("option1"), Option("option2"), key1=value1, key2=value2)

subcommand = Subcommand("name", Option("option1"), Option("option2"), args=Args(key1=value1, key2=value2))

Subcommand 需要三类参数

当只填写了name时,Alconna会默认该Subcommand的参数为 Ellipsis (即"...")

options 为选项类的列表, 但注意不能嵌套Subcommand

args的格式为key-value, key是作为该参数的说明与查找的,在指令中不需要输入; value支持一般字符串、正则表达式与元素类型