コマンドラインを処理するために 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