<p>你的问题基本上和几个月前问的问题一样</p>
<p><a href="https://stackoverflow.com/questions/24484035/multiple-invocation-of-the-same-subcommand-in-a-single-command-line">Multiple invocation of the same subcommand in a single command line</a></p>
<p>它想多次调用同一个子命令,但问题是相同的-如何处理多个<code>subparsers</code>参数。在</p>
<p>其中的解决方案要么在将命令行传递给单独解析的片段之前拆分命令行,要么从一个解析中收集“未使用”的片段,以便在第二个或第三个解析中使用。在</p>
<p>以下是对返回2个命令的代码的调整:</p>
<pre><code>import argparse
parser = argparse.ArgumentParser(prog='My Prog')
sub_parsers = parser.add_subparsers(dest='cmd')
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=3, 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=3, help='option 3 help')
argv = "subcommand_a FOO opt1=bar opt2 1 2 3 subcommand_b BAR opt1=foo opt3 a b c"
rest = argv.split()
while rest:
[args, rest] = parser.parse_known_args(rest)
print args
print rest
</code></pre>
<p>哪个打印:</p>
^{pr2}$
<p>我删除了<code>' '</code>(见另一个答案的结尾)</p>
<p>我将<code>opt2</code>和{<cd4>}改为接受3个参数,而不是变量<code>+</code>。使用<code>+</code>时,它无法判断<code>opt2</code>的列表在哪里结束,下一个命令从哪里开始。在</p>
<p>同样重要的是,不同的命令使用不同的选项(标志)。请注意,第一个<code>opt1</code>以第二个值“foo”结尾,第二个命令则没有。关于这些问题的讨论和解决方法,请参阅另一个帖子。在</p>