Python 函数转命令行界面库 -- Argsense CLI

argsense 是一个 python 命令行界面库, 是 click, fire, typer 之外的又一个选项.

argsense 最大的特点是极低的侵入性设计和近乎零成本的上手难度, 如果你熟悉 python 函数是如何传参的 (这是大部分 python 初学者已经掌握的知识), 那么你就可以很快上手 argsense.

特性一览

  • 非常低的学习成本.
  • 低侵入性设计: 任何被 argsense 装饰的函数, 仍然可以像原来一样在模块内调用.
  • 现代化的界面.
  • 基于类型标注实现的自动类型转换.
  • 支持 *args**kwargs 传参.
  • docstring 解析.
  • 友好的错误提示.

安装

项目地址: https://github.com/likianta/argsense-cli

通过 pip 安装:

pip install argsense

python 版本要求 3.8 及以上. 当前 argsense 最新版本为 0.5.0+.

使用

假设我们有一个脚本:

# hello_world.py

def hello(name: str):
    print(f"Hello, {name}!")

if __name__ == "__main__":
    hello("Alice")

导入 argsense, 使用 @cli.cmd() 装饰器, 将它转换为命令行程序:

# hello_world.py
from argsense import cli

@cli.cmd()
def hello(name: str):
    print(f"Hello, {name}!")

if __name__ == "__main__":
    cli.run()

现在, 我们在命令行中可以这样调用:

# 显示帮助
py hello_world.py hello -h

# 调用
py hello_world.py hello Alice

更多用法

使用 *args**kwargs 传递参数

from argsense import cli

@cli.cmd()
def main(*args, **kwargs):
    print(args, kwargs)

if __name__ == "__main__":
    cli.run(main)
py main.py alpha beta :true :false :none --xxx hello --yyy world --zzz :true

类型自动转换

  • 仅支持基本类型的转换.
  • 如果没有标注类型, 则按照 str 类型处理.
  • 如果标注为 typing.Any, 则根据值的特征进行自动推断, 例如 “123” 会被推断为 int.
from argsense import cli
from typing import Any

@cli.cmd()
def main(a: str, b: int, c: float, d: bool, e, f: 'any', g: Any):
    print([(x, type(x)) for x in (a, b, c, d, e, f, g)])

if __name__ == "__main__":
    cli.run(main)
py main.py -h
py main.py 1 2 3.12 :true foo :none :false

位置参数和关键字参数

from argsense import cli

@cli.cmd()
def main(a: int, b: int, c: int, d: int = None, e: int = None, f: int = None):
    print(a, b, c, d, e, f)

if __name__ == "__main__":
    cli.run(main)
py main.py -h
py main.py 1 2 3
py main.py 1 2 3 4 5 6
py main.py 1 2 3 --d 4 --e 5 --f 6

纠错演示

TODO

谁在使用它

下面是目前收集到的一部分使用 argsense 的开源项目, 你可以从下面的截图中获得灵感, 以及从这些项目源代码中 (通常是 __main__.py 脚本) 学习 argsense 的实际应用.

原理

TODO

原理

TODO

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值