您在问的
argparse东西不是为它写的:它很好地解析了一个命令行(但只有一个),并且您想在一行中解析多个命令。恕我直言,您必须对参数数组进行初始分割,然后
argparse在每个子命令上使用。接下来的函数接受一个参数列表(可以是
sys.argv),跳过从每个已知子命令开始的数组中剩余的第一个和拆分。然后,您可以在每个子列表上使用argparse:
def parse(args, subcommands): cmds = [] cmd = None for arg in args[1:]: if arg in (subcommands): if cmd is not None: cmds.append(cmd) cmd = [arg] else: cmd.append(arg) cmds.append(cmd) return cmds
在您的示例中:
parse(['test.py', 'executeBuild', '--name', 'foobar1', 'executeBuild', '--name', 'foobar2'], ('executeBuild',))=>
[['executeBuild', '--name', 'foobar1'], ['executeBuild', '--name', 'foobar2']]
限制:子命令用作保留字,不能用作选项参数。



