我有一个使用 argparse 来处理命令行的程序。程序的命令行,因此它的帮助变得上下文敏感。我想让帮助反映上下文敏感性。
例如
prog --mode=1 OPTA OPTB OPTC<br>
prog --mode=2 OPTD OPTE OPTF<br>
prog --mode=1 -h<br>
"In mode 1 you have four options, A,B,C,D"
prog --mode=2 -h<br>
"You mode 2 you have four options, D,E,F,G"
我应该在这里补充一点,这只是一个例子。在我的实际程序中,可能有任意数量的模式,它们不是由我的代码定义的,它们是由我的 API 的用户定义的。因此,不可能对每种模式的帮助进行硬编码。实际的帮助文本稍后定义。
这意味着在处理 --mode 参数后更改参数 'option' 的帮助字符串以反映不同的模式。下面的代码基本上可以正常工作,因为命令按预期工作,但帮助没有。
问题是 parse_known_args() 似乎处理了 -h 然后退出。我需要parse_args()
处理帮助。显然我可以简单地解析sys.argv
并找到--mode
自己,但这肯定会打败argparse
.
import argparse
parser = argparse.ArgumentParser(description='Test argparser')
parser.add_argument('--mode', nargs=1, type=int,
default=[1],
help='program mode')
options={
1:["OPTA","OPTB","OPTC","OPTD"],
2:["OPTD","OPTE","OPTF","OPTG"]}
args = parser.parse_known_args()[0]
print "Initial pass"
print args
parser.add_argument('options', type=str, nargs='+',
choices=options[args.mode[0]]+["ALL"],
default="ALL",
help='One or more of the options, above')
args = parser.parse_args()
print "Second pass"
print args