Nemo2011 / Alconna

A High-performance, Generality, Humane Command Line Arguments Parser Library. 一个直观的、高性能、泛用的命令行参数解析器集成库

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Alconna

Alconna latest release Licence PyPI PyPI - Python Version FOSSA Status

简体中文|English

关于

Alconna 隶属于 ArcletProject, 是一个简单、灵活、高效的命令参数解析器, 并且不局限于解析命令式字符串。

Alconna 拥有复杂的解析功能与命令组件,但 一般情况下请当作奇妙简易的消息链解析器/命令解析器(雾)

安装

pip

pip install --upgrade arclet-alconna
pip install --upgrade arclet-alconna[full]

完整安装

pip install --upgrade arclet-alconna[all]

文档

文档链接: 👉指路

相关文档: 📚文档

简单使用

from arclet.alconna import Alconna, Option, Subcommand, Args

cmd = Alconna(
    "/pip",
    Subcommand("install", [Option("-u|--upgrade")], Args.pak_name[str]),
    Option("list")
)

result = cmd.parse("/pip install cesloi --upgrade") # 该方法返回一个Arpamar类的实例
print(result.query('install'))  # 或者 result.install

其结果为

{'value': None, 'args': {'pak_name': 'cesloi'}, 'options': {'upgrade': Ellipsis}}

讨论

QQ 交流群: 链接

特点

  • 高效. 在 i5-10210U 处理器上, 性能大约为 41000~101000 msg/s; 测试脚本: benchmark
  • 精简、多样的构造方法
  • 强大的类型解析与转换功能
  • 可传入同步与异步的 action 函数
  • 高度自定义的帮助信息格式、命令解析器
  • 自定义语言文件, 支持 i18n
  • 命令输入缓存, 以保证重复命令的快速响应
  • 模糊匹配、命令补全等一众特性

类型转换示范:

from arclet.alconna import Alconna, Args
from pathlib import Path

read = Alconna(
    "read", Args["data", bytes], 
    action=lambda data: print(type(data))
)

read.parse(["read", b'hello'])
read.parse("read test_fire.py")
read.parse(["read", Path("test_fire.py")])

'''
<class 'bytes'>
<class 'bytes'>
<class 'bytes'>
'''

模糊匹配示范:

from arclet.alconna import Alconna

alc = Alconna('!test_fuzzy', "foo:str", is_fuzzy_match=True)
alc.parse("!test_fuzy foo bar")

'''
!test_fuzy not matched. Are you mean "!test_fuzzy"?
'''

typing 支持示范:

from typing import Annotated  # or typing_extensions.Annotated
from arclet.alconna import Alconna, Args

alc = Alconna("test", Args.foo[Annotated[int, lambda x: x % 2 == 0]])
alc.parse("test 2")
alc.parse("test 3")

'''
'foo': 2
ParamsUnmatched: 参数 3 不正确
'''

命令补全示范:

from arclet.alconna import Alconna, Args, Option

alc = Alconna("test", Args["bar", int]) + Option("foo") + Option("fool")
alc.parse("test --comp")

'''
下一个输入可能是以下:
> fool
> -h
> int
> foo
> --help
'''

许可

Alconna 采用 MIT 许可协议

FOSSA Status

鸣谢

JetBrains: 为本项目提供 PyCharm 等 IDE 的授权

About

A High-performance, Generality, Humane Command Line Arguments Parser Library. 一个直观的、高性能、泛用的命令行参数解析器集成库

License:MIT License


Languages

Language:Python 100.0%