This repository was archived by the owner on Aug 26, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
Alconna Args
Tarrailt edited this page Jan 24, 2022
·
2 revisions
Args
是一个特殊的类,用来包装command
中的args
opt = Option("test", args=Args(foo=AnyStr, num=AnyDigit).default(foo="bar"))
或
opt = Option("test", args=Args["foo":str:"bar", "num":int])
注: 在Args中, AnyStr
与str
是等价的, 其他类型同理
Args
构造时需要格式为key-value的多个参数, 或传入多个slice对象
推荐使用Args相关的魔术方法,如
>>> ar = Args["test":bool:"True"]["aaa":str:"bbb"] << Args["perm":AnyStr:"de"] + ["month", AnyDigit]
>>> ar["foo"] = ["bar", ...]
>>> ar
Args('test': '(True|False)' = 'True', 'aaa': '(.+)' = 'bbb', 'perm': '(.+)' = 'de', 'month': '(\d+)', 'foo': 'bar' = '<class 'inspect._empty'>')
>>> ar["foo"]
('bar', <class 'inspect._empty'>)
Args.default()
用来设置key
对应的value
的默认值,可以传入alconna.types
下的Empty
(实际为inspect._empty)
对于int
,bool
类的参数, Alconna
解析成功后会把匹配出来的值(应该是str) 转回对应的类型 (如'123'
变为123
)
Alconna
提供了一些预制的正则表达式, 通常以 "Any" 打头
您可以在alconna.types
里找到它们:
- AnyStr: 任意字符
- AnyDigit: 任意整数
- AnyFloat: 任意浮点数
- AnyIP: 任意ip
- AnyUrl: 任意链接
- Bool:
"True"
或"False"
- Email: 任意邮件地址
当然,您可以填入自己的正则表达式
!!!warning
请尽量不要在
option
与subcommand
的name
里填入正则表达式
AnyParam
与AllParam
是特殊的两种参数类型, 作用分别为单参泛匹配与全参泛匹配
您可以在alconna.types
里找到它们
对于同个命令, /test foo bar 123
来讲
test1 = Alconna(
command="/test",
main_args=Args["wild":AnyParam],
)
test2 = Alconna(
command="/test",
main_args=Args["wild":AllParam],
)
test1
只能将foo
匹配给wild
而 test2
能够将foo bar 123
匹配给wild
!!!warning
AllParam
会直接截断后续的命令解析操作, 请谨慎使用