带有依赖项和冲突的python argparse子命令

2024-05-17 07:16:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我想使用argparse构建一个带有子命令的工具。可能的语法是

/tool.py download --from 1234 --interval 60

/tool.py download --build 1432

/tool.py clean --numbers 10

所以我想使用argparse来实现:

  1. 确保始终同时使用“--from”和“--interval”
  2. 确保'--build'从不与其他参数一起使用

但我没有找到一种方法将“--from”和“--internal”配对到一个组,然后使该组与“--build”互斥。

下面是我当前的代码,它只使“--from”和“--build”相互排斥。既不能确保'--from'和'--interval'组合在一起,也不能确保'--interval'和'--build'是互斥的。

parser = argparse.ArgumentParser(description='A Tool')
subparsers = parser.add_subparsers(help='sub-command help')

#create the parser for the 'download' command
download_parser = subparsers.add_parser('download', help='download help')
download_parser.add_argument('--interval', dest='interval', type=int,help='interval help')
group = download_parser.add_mutually_exclusive_group()
group.add_argument('--from',type=int, help='from help')
group.add_argument('--build', type=int, help='interval help')

例如

/tool.py download --from 1234

不应允许,因为“--from”必须与“--interval”一起使用。但我的代码默默地接受它。

以及

/tool.py download --interval 1234 --build 5678

不应允许,因为“--build”不能与其他参数一起使用。但我的代码也接受它。

任何建议将不胜感激。谢谢。


Tags: 代码frompybuildaddparserdownloadtype