python argparse子命令具有依赖性和冲突
我想使用 argparse 来构建一个带有子命令的工具。可能的语法可以是
/tool.py download --from 1234 --interval 60
/tool.py 下载 --build 1432
/tool.py clean --numbers 10
所以我想使用 argparse 来实现:
- 确保 '--from' 和 '--间隔'总是一起使用
- 确保'--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 下载 --来自 1234
不应允许 因为“--from”必须与“--interval”一起使用。但我的代码默默地接受它。
和
/tool.py download --interval 1234 --build 5678
,因为“--build”不能与其他参数一起使用。但我的代码也接受它。
任何建议都将受到高度赞赏。谢谢。
I want to use argparse to build a tool with subcommand. The possible syntax could be
/tool.py download --from 1234 --interval 60
/tool.py download --build 1432
/tool.py clean --numbers 10
So I want to use argparse to implement:
- ensure '--from' and '--interval' are always together used
- ensure '--build' is never used with other arguments
But I didn't find a way to pair '--from' and '--internal' to a group, then make the group is mutual exclusive with '--build'.
Below is my current code, and it only make the '--from' and '--build' are mutual exclusive. Neither ensure '--from' and '--interval' come together, nor ensure '--interval' and '--build' are mutual exclusive.
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')
For example,
/tool.py download --from 1234
should not be allowed because '--from' must work with '--interval'. But my code accepts it silently.
And
/tool.py download --interval 1234 --build 5678
should not be allowed because '--build' can't be used with other argument. But my code accepts it too.
Any suggestion will be highly appreciated. Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以使用 自定义操作 来实现此目的:
但实际上,我认为这是更短更简单:
You could use custom actions for this:
But really, I think this is shorter and simpler: