首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用argparse进行强制参数组合?

如何使用argparse进行强制参数组合?
EN

Stack Overflow用户
提问于 2019-09-11 01:44:20
回答 1查看 332关注 0票数 0

我正在用Python开发一个CLI工具,它有很多功能。我希望通过命令行调用这些独立的功能

代码语言:javascript
运行
复制
    parser = argparse.ArgumentParser()

    group_check = parser.add_argument_group('Execute State Check')
    group_check.add_argument('-c', '--check-state',  action='store_true')

    group_etl = parser.add_argument_group('Execute ETL', '3 required arguments.')
    group_etl.add_argument('-e', '--execute-etl',   action='store_true',    required=True)
    group_etl.add_argument('-o', '--region',        action='store',         required=True)
    group_etl.add_argument('-t', '--table',         action='store',         required=True)
    group_etl.add_argument('-m', '--max-date',      action='store',         required=True)

    args = parser.parse_args()

不幸的是,required=True是全局的,所以我不能强制要求如果使用-e,我需要另外3个开关,并且我可以在没有这些开关的情况下使用-c。有没有办法在参数组中强制使用开关?

代码语言:javascript
运行
复制
./etl.py -c

usage: etl.py [-h] -e -o REGION -t TABLE -m MAX_DATE [-c]
etl.py: error: the following arguments are required: -e/--execute-etl, -o/--region, -t/--table, -m/--max-date
Tue, 10 Sep 2019 19:39:13 INFO     Quitting...
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-11 01:49:47

我会使用子命令,而不是参数组。

代码语言:javascript
运行
复制
etl.py check-state  # Do state checking
etl.py execute-et -o foo -t bar -m 2020-01-31  # Execute

代码看起来像这样

代码语言:javascript
运行
复制
parser = argparse.ArgumentParser()
sp = parser.add_subparsers()
check = sp.add_parser('check-state')
execute = sp.add_parser('execute-etl')

check.set_defaults(cmd='check-state')
execute.set_defaults(cmd='execute-et')

execute.add_argument('-o')
execute.add_argument('-t')
execute.add_argument('-m')

如果-o-t-m是必需的,请考虑将它们作为位置参数。

cmd的默认值由命令行上使用的子命令设置(技术改编自documentation),有效地记录了在生成的Namespace实例中选择的子命令。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57875917

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档