私はCLIを持っていますgitのようなツールに似たサブコマンド用のサブパネルを利用したビルドです。私のサブコマンドのいくつかは共通オプションを共有しているので、オプションを定義するグループパーサーがあり、それらを必要とする各サブコマンドはparents=group_parser
を引数の1つとして使います。例:あなたが見るようにPython argparse親からの助けを借りて
group_parser = argparse.ArgumentParser()
group_parser.add_argument('-f', '--foo', action='store_true')
command1_parser = subparsers.add_parser('command1', parents=[group_parser])
command2_parser = subparsers.add_parser('command2', parents=[group_parser])
だから、Command1とcommand2の両方がオプション--foo
を継承します。私がやろうとしているのは、command1とcommand2でfooのhelptextを別々に更新することです。たとえば、私がmyprog command1 -h
を実行した場合、--foo
の別のヘルプメッセージが表示され、myprog command2 -h
を実行するとそのメッセージが表示されます。問題は、私がやるまでparse_args()
は、その引数に更新するための名前空間が存在しないので、このような何かがうまくいかないです。
group_parser = argparse.ArgumentParser()
group_parser.add_argument('-f', '--foo', action='store_true')
command1_parser = subparsers.add_parser('command1', parents=[group_parser])
command1.foo['help'] = "foo help for command1"
command2_parser = subparsers.add_parser('command2', parents=[group_parser])
command2.foo['help'] = "foo help for command2"
は何とかadd_argument()
の外の引数にパラメータを追加することができ、このです関数?唯一の解決策は、継承された親を使用せず、各サブコマンドごとにfooを個別に定義することですが、パラメータを更新する方法があれば理想的です。
これは非常に参考になり、他のディスカッションへのリンクに感謝します。これは明らかにその質問に答えるとともに、私にはさまざまな解決策について多くの有益な情報を与えました。親は、コマンドが文字通り同一である場合にも有効です。たとえば、--debugや各サブコマンドのすべての点でまったく同じオプションがあります。同じ名前を共有しているが、多少使い方が異なる(したがって異なるヘルプコマンドが必要な)argsについては、単にそれらを分割し、それぞれに別々の 'add_parser'行を作成しました。 – iceblueorbitz