我正在用Python开发一个CLI工具,它有很多功能。我希望通过命令行调用这些独立的功能
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。有没有办法在参数组中强制使用开关?
./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...
发布于 2019-09-11 01:49:47
我会使用子命令,而不是参数组。
etl.py check-state # Do state checking
etl.py execute-et -o foo -t bar -m 2020-01-31 # Execute
代码看起来像这样
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
实例中选择的子命令。
https://stackoverflow.com/questions/57875917
复制相似问题