使用从YAML生成的argparse设置生成__main__.py
项目描述
cligen
cligen是一个用于生成命令行解析代码的实用程序,从YAML规范中编写您的__main__.py
。生成的代码需要Python 3.8+。
对于需要子命令left
和right
的命令行工具direction
,其中子命令left
可以具有选项--u-turn
(假设您在道路的右侧驾驶),并且两个子命令都可以有--verbose
选项,其外观将如下所示
!Cli 0:
- !Instance driving.Direction
- !Option [verbose, v, !Help increase verbosity level, !Action count]
- left:
- !Help turning to the left
- !Option [u-turn, U, !Type bool, !Help make a U-turn]
- right:
- !H turning to the right
结果将是,当使用direction left -h
时将显示
usage: direction left [-h] [--u-turn] [--verbose]
optional arguments:
-h, --help show this help message and exit
--u-turn, -U make a U-turn
--verbose, -v increase verbosity level
当从命令行调用direction left
时,__main__.py
中的代码将创建一个从driving.py
导入的Direction
类的实例,并将解析结果作为参数传递给初始化,然后调用该类的left_subcommand
或方法left
(按此顺序尝试)。cligen
可以生成调用从Python文件导入的函数的代码,或者调用从YAML规范插入到__main__.py
本身的代码(在这种情况下,不尝试..._subcommand
,将解析的结果传递给函数)。
YAML 文档可以单独存放在文件 cli.yaml
中,或者,如果您想减少项目根目录的文件杂乱,它也可以存储在 __init__.py
中的变量 _cligen_data
中,这意味着在该文件中的以下两行之间
_cligen_data = """\
"""
YAML 文档使用各种标签,其中许多都有一个简写版本(例如,!H
等同于使用 !Help
)。
将命令行选项和参数数据存储在类似于 YAML 的可编程可修改的格式中,使得检查或操作所有实用程序变得更加容易。例如,如果您想确保所有具有 --verbose
选项的实用程序也具有一个降低详细程度的 --quiet
选项。
功能列表
-
多个长选项(
--date
)和短选项(-D
)可以与一个目标相关联。 -
额外的智能类型/操作。例如,类型为 'date' 的选项默认为
datetime.date.today()
,您还可以指定类似yesterday
或-w-2
(两周前)的参数。 -
默认值,其中可选地更新了来自配置文件(YAML/INI/PON)的一些默认值。
-
嵌套解析器用于子命令,子命令从其父命令继承选项。这允许您在子命令之前或之后插入父选项,而无需重新排列命令行。
-
可选默认子命令/解析器,用于处理未知选项/参数。
-
可选缩写形式,以替代可执行名称的形式出现,用于常用子命令和/或选项字符串。
-
除了 Python 标准库之外,没有任何依赖项,除非您的配置文件格式需要安装某些库(YAML -> ruamel.yaml)
-
允许使用 YAML 别名作为标签的标量值被其他标签使用
- !Help &xhelp text1 text2 text3 # this is the same as: "&xhelp !Help text1 text2 text3" - !Prolog [*xhelp] # xhelp is a tagged scalar, "!Prolog *xhelp" would error # the value for !Prolog is automatically un-sequenced
使用 !Config
在其最明确的形式中,标签 !Config
可以接受一个包含两个元素的序列作为值。第一个元素表示 类型(pon
、yaml
、ini
、TBI: json
),第二个表示文件的 路径。以波浪号(~
)开头的路径将被展开。不以波浪号或(正)斜杠(/
)开头的路径将被附加到您的用户配置目录。
如果 !Config
后跟一个看起来像路径的标量(即值的开始是 ~
或包含一个 /
),则该路径的扩展名被视为 类型。在其他情况下,假定 !Config
后跟一个 类型,基名是从包名称(_package_data['full_package_name']
)派生的,在您的用户配置目录中。
用户配置目录基于 XDG 配置位置(在 Windows 上,配置信息预计在 %APPDATA%
下)
当指定 !Config
时,插入的代码将在命令行上检查 --config some_explicit_path
并从指定的路径加载配置数据。
配置文件格式
假设配置文件包含根级别的字典(对于类似 .ini
的格式,数据在加载期间转换为字典)。该字典包含与各种子解析器对应的键。一个 global
部分(或可选地,PON 中的 glbl
以防止使用保留关键字,在加载后重命名为 global
),用于设置在子解析器之前出现的选项以及全局选项的默认值。每个部分由键值对组成,其中键对应于长选项(--verbose
)或如果该选项不可用,则对应于短选项(-v
),不带有前导破折号。
假设您有以下配置
!Cli 0:
- !Opt [verbose, v, !H increase verbosity, !Action count]
- !Config [pon, /usr/local/etc/myutil.pon]
- subp1: []
您的 myutil.pon
可以使用
dict(glbl=dict(verbose=2))
来设置详细程度(您可能想以更美观的方式格式化您的 PON)。
同样的,使用 YAML 文件
!Cli 0:
- !Opt [verbose, v, !H increase verbosity, !Action count]
- !Config YAML
- subp1: []
您的 ~/.config/your_util_name/your_util_name.yaml
将会是
global:
verbose: 2
argparse
早期版本的cligen在__main__.py
文件中生成argparse
命令。当前的Python输出不再使用argparse
,导致代码大小大约增加了两倍,但速度也提高了两倍。
可以通过提供--type argparse
来调用旧的、不再维护的代码生成器。
项目详情
下载文件
下载适合您平台文件的文件。如果您不确定选择哪一个,请了解有关安装包的更多信息。
源代码发行版
构建发行版
cligen-0.5.4.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c4f1781c35e9af736340c7d350f02d0e0efb948a1019e3eefb720512ebdded51 |
|
MD5 | 02d4fa80f528f460ec5a89a0c7fec566 |
|
BLAKE2b-256 | 8e44b48c9a2cfcf515daac66b2460b91250f99285bdcf79e22ed574ae1514700 |
cligen-0.5.4-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b512598d71d5dc479650e335d83aefed7f8c75415a84c7e008bdc23e2960260e |
|
MD5 | 45c10065bcea3d865d221811368568ff |
|
BLAKE2b-256 | d10a1b09013383a845019297fa6b092689be6650a85f342eb21374e59b6f6631 |