程序实际运行时总会需要一些与运行环境有关的参数,服务端一般会直接配置在固定路径下的文件中。但这样缺少一点灵活性,如果参数不那么繁杂,使用 CLI (Command-line interface) 是非常有用,开发和运维用了都说好,大家一口气上五楼。

用归用,但是否好用,不同的 CLI 实现风格是不太一样的。

以下是我见过的几种

Library

普通的函数库。一般会提供【添加参数】、【添加子命令】这样的 api, 用于构造出 parser 来解析命令行参数。一般不提供【bind 到函数】之类的 api,需要人工编码处理。但其实做到这个份上已经足够了,剩下的事不是 parser 该做的。

DSL

非常酷,你只需要用纯文本完整地写出 Help 信息(这个 DSL 语法就是 Help 内容),它会通过解析这个文本来生成 parser。非常直观,不依赖任何语言特性,于是在所有语言里都能实现出一致的体验,实际上也都实现了…… 但和 argparse 一样只是个 parser ,需要你r人工编码去调用具体的函数。

元编程——根据函数信息直接生成参数 parser 和函数 binding

这种方式比较依赖语言的元编程特性,至少也得有反射机制支持动态获取函数参数列表和动态调用函数。其中 Python 的特性非常给力,连函数注释都在运行时获得,于是就能直接解析注释里的参数信息来生成 parser。

完。