-
Notifications
You must be signed in to change notification settings - Fork 1
Alconna TemplateCommand
TemplateCommand
是Alconna
的命令体基类,用来规范命令所需参数
TemplateCommand
规定一个命令体需要如下参数:
- name: 命令体名称
- args: 命令体参数
- separator: 命令体分隔符
- action: 参数对应的响应函数
TemplateCommand
可以传入一个Action
, 这个Action应该是Callable的function
, 或者是ArgAction
类的实例
Action
会在Command
被成功匹配,或Command
的Args
被全部匹配完毕后执行,如
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
可以传入的参数的个数应该与TemplateCommand
的Args
给出的参数个数一致
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
里找到:
- store_bool: 存储一个布尔值
- store_const: 存储一个整数
- version: 返回一个以元组形式存储的版本信息
Option
是基础的选项类
option = Option("name", key1=value1, key2=value2)
或
option = Option("name", args=Args(key1=value1, key2=value2))
Option
需要两类参数
- name: 该
Option
的名字,必填 - args: 该
Option
可能的参数,选填,可用kwargs形式或Args
当只填写了name
时,Alconna
会默认该Option
的参数为 Ellipsis (即"...")
args
的格式为key-value, key
是作为该参数的说明与查找的,在指令中不需要输入; value
支持一般字符串、正则表达式与元素类型
Option
可以传入alias参数,作为该option的选项别名
构造Option
时, 以下两种方式是可用的:
Option("--time", alias="-t", args=Args["sec":int])
与
Option("--time| -t", args=Args["sec":int])
解析时, --time 30
与 -t 30
都将被成功解析
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: 该
Option
的名字,必填 - options: 该
Subcommand
可能的选项,选填,可选多个 - args: 该
Option
可能的参数,选填,可用kwargs形式或Args
当只填写了name
时,Alconna
会默认该Subcommand
的参数为 Ellipsis (即"...")
options
为选项类的列表, 但注意不能嵌套Subcommand
args
的格式为key-value, key
是作为该参数的说明与查找的,在指令中不需要输入; value
支持一般字符串、正则表达式与元素类型