我试图写一个程序,能够执行多个子命令。argparse模块非常有用,但我认为它缺乏指定多个子命令的能力。例如,如果我有以下代码:
parser = argparse.ArgumentParser(prog='My Prog')
sub_parsers = parser.add_subparsers()
subcommand_a = sub_parsers.add_parser('subcommand_a', help='a help')
subcommand_a.add_argument('req1', help='required argument 1 help')
subcommand_a.add_argument('--opt1', help='option 1 help')
subcommand_a.add_argument('--opt2', nargs='+', help='option 2 help')
subcommand_b = sub_parsers.add_parser('subcommand_b', help='b help')
subcommand_b.add_argument('req1', help='required argument 1 help')
subcommand_b.add_argument('--opt1', help='option 1 help')
subcommand_b.add_argument('--opt2', help='option 2 help')
subcommand_b.add_argument('--opt3', nargs='+', help='option 3 help')
parser.parse_args()
我不能在命令行上同时指定子命令\u a和子命令\u b。我一次只能做其中一个。我可以想象这需要一个自定义操作,甚至可能需要argparse的子类化,但我不确定从哪里开始。我想把这个程序称为如下:
^{pr2}$有什么想法吗?在
我做了一些测试,并将子命令更改为其他有效的字符串。 如果使用:
它起作用了。在
我做了一些研究,但没有找到一个字符串相等的子命令。文档的概述也没有说什么。我认为这是一个限制(由选择)或一个bug。 也许你可以在Source Code Hosting里查一下
你的问题基本上和几个月前问的问题一样
Multiple invocation of the same subcommand in a single command line
它想多次调用同一个子命令,但问题是相同的-如何处理多个
subparsers
参数。在其中的解决方案要么在将命令行传递给单独解析的片段之前拆分命令行,要么从一个解析中收集“未使用”的片段,以便在第二个或第三个解析中使用。在
以下是对返回2个命令的代码的调整:
哪个打印:
^{pr2}$我删除了
' '
(见另一个答案的结尾)我将}改为接受3个参数,而不是变量
opt2
和{+
。使用+
时,它无法判断opt2
的列表在哪里结束,下一个命令从哪里开始。在同样重要的是,不同的命令使用不同的选项(标志)。请注意,第一个
opt1
以第二个值“foo”结尾,第二个命令则没有。关于这些问题的讨论和解决方法,请参阅另一个帖子。在相关问题 更多 >
编程相关推荐