我想找到解析相關參數序列的方法,最好使用。解析不相互排斥的命令行參數組
例如:
command --global-arg --subgroup1 --arg1 --arg2 --subgroup2 --arg1 --arg3 --subgroup3 --arg4 --subcommand1 --arg1 --arg3
其中--global-arg
適用於整個命令,但每個--subgroupN
參數具有僅適用於它的子參數(並且可以具有相同的名稱,如--arg1
和--arg3
以上) ,並且其中一些子參數是可選的,所以子參數的數量不是常量。但是,我知道每個--subgroupN
子參數集都是通過存在另一個--subgroupN
或參數列表的末尾來完成的(如果全局參數不能在最後出現,我不會發生混淆,儘管我認爲只要他們不會與子參數名稱衝突)。
的--subgroupN
元素本質上是子命令,但我似乎不能夠因爲它吸食任何以下--subgroupN
條目以及(因此意外的參數barfs)使用的子解析器的能力。
是否有超越寫我自己的解析器任何建議(這種風格的參數列表中所使用的xmlstarlet的例子)?我想我至少可以利用的東西出來argparse的,如果這是唯一的選擇......
例子下面是找到一種方法來解析大意如下的參數結構的嘗試
的例子:
(a --name <name>|b --name <name>)+
在第一個例子中,我希望有--a和--b引入一組由subparser處理的參數。
我希望能沿着
Namespace(a=Namespace(name="dummya"), b=Namespace(name="dummyb"))
子分析器例子的線得到的東西也許失敗
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers()
parser_a = subparsers.add_parser("a")
parser_b = subparsers.add_parser("b")
parser_a.add_argument("--name")
parser_b.add_argument("--name")
parser.parse_args(["a", "--name", "dummy"])
> Namespace(name='dummy') (Good)
parser.parse_args(["b", "--name", "dummyb", "a", "--name", "dummya"])
> error: unrecognized arguments: a (BAD)
互斥組失敗
parser = argparse.ArgumentParser()
g = parser.add_mutually_exclusive_group()
g1 = g.add_mutually_exclusive_group()
g1.add_argument("--name")
g2 = g.add_mutually_exclusive_group()
g2.add_argument("--name")
> ArgumentError: argument --name: conflicting option string(s): --name (BAD)
(我是不是真的期待這個工作,這是一個嘗試,看看我是否可以重複分組論證。)
請修改您的問題以顯示您嘗試的代碼。你會得到更好的答案。 – msw
至少有一個關於處理多個子命令的SO問題。解決方案涉及諸如遞歸子命令之類的東西。沒有任何直接使用'argparse'。 – hpaulj
搜索'[argparse] multiple'出現這樣的帖子,http://stackoverflow.com/q/25318622/901925 – hpaulj