通过argparse进行类级配置

arguable的Python项目详细描述


https://github.com/Dominik1123/arguable/workflows/Tests/badge.svghttps://codecov.io/gh/Dominik1123/arguable/branch/master/graph/badge.svghttps://img.shields.io/pypi/v/arguable.svg

有争议的

“arguable”代表“argparse configurable”。此项目通过argparse和命令行接口启用类级配置。在

安装

pip install arguable

用法

arguable.Arguable继承的类定义类级别 argparse.Namespaceobjectconfig,其中包含相关的 参数及其默认值。相应的参数解析器是 根据这些参数自动创建并存储为 config_parserclass属性。在

例如:

^{pr2}$

创建类时,Example.config_parser属性保持不变 带有参数--example-language的参数解析器 type=strdefault='en'。在

当类被实例化时,它会自动配置它的实例 通过指定一个实例级属性config,该属性将获取 提供命令行参数并隐藏类级别config默认值。在

因此,通过python example.py --example-language=de调用上述脚本将打印de,而忽略参数则使用默认的en。在

参数类型

其他支持的参数类型是序列(例如元组),它将 使用以下参数定义:

# `par` is the tuple parameter default.parser.add_argument(name,type=type(par[0]),nargs=len(par),default=par)

bool

# `par` is the bool parameter default.parser.add_argument(name,action=f'store_{"false"ifparelse"true"}')

当然还有所有的数字类型。在

定制

默认情况下,小写的类名将用作 参数名称。这可以通过两个类变量进行配置:

  • config_prefix–如果提供,则直接将其用作前缀。在
  • config_removesuffix–如果没有提供config_prefix, 使用小写的类名,并用这个后缀减少 (如有提供)。在

这些变量也可以在类创建期间提供 config_前缀,例如:

classExampleA(Arguable,prefix='test'):config_prefix='text'# similarclassExampleB(Arguable,removesuffix='b'):config_removesuffix='b'# similar

显示完整的帮助文本

为了使应用程序知道所有注册参数, Arguable类有一个super_parser属性,它是一个 argparse.ArgumentParser的实例。每当一个类注册 新参数,不仅仅是类级解析器config_parser获取 更新了,但也更新了应用程序级别super_parser。这个解析器 可用于显示包含所有参数的帮助文本。在

这个包提供了一个helper解析器类arguable.ArgumentParser, 当--help 是请求的。在

super_parser也可用于验证 所有给定参数。因为每个班级都只关心自己 参数,多余的参数将被忽略(使用parse_known_args)。 使用super_parserone可以验证提供的所有参数 应用程序支持:

fromarguableimportArguableif__name__=='__main__':# The following will report any excess arguments.Arguable.super_parser.parse_args()

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
使用安卓 studio和mysql进行第二次照片更新的java   java是我的pom。xml安装和生成失败   获取并处理java异常行   java 2d平台冲突错误   java使用SSH exec通道调用shell脚本,但忽略对其他shell脚本的调用   java如何将postgresSql查询重写为Springdata jpa查询   java无法使用IP地址和端口登录liferay 6.2   爪哇1。按钮不显示文本2。逻辑正确吗   java如何在片段中使用谷歌地图视图?   如何在java中连接字符?   Java右移输出负值   java@PropertySource()在@ImportResource()导入的XML中定义的bean中不起作用   Java、SWT使窗口(shell)部分透明   回溯回溯java中的DUCU