何が起こっているのか説明できますが、解決策を提供できない場合があります。
簡単に言えば、はその形式とヘルプ ラインの値のsp1.prog両方で使用されます。そして、それを念頭に置いて構築されています。usage%(prog)susage
sp1 = subparsers.add_parser('prog1', parents = [parser1, parser2])
パーサーを作成し、 から引数を追加しますparents。 (サブパーサー Action クラス) のadd_parserメソッドです。class _SubParsersActionそして、progそのパーサーの属性は次のように作成されます:
if kwargs.get('prog') is None:
kwargs['prog'] = '%s %s' % (self._prog_prefix, name)
print(sp1.prog)この属性は('master prog1' と予想します)で確認できるはずです。これは、行で使用される値でusageあり、ヘルプ行のいずれかで%(prog)s.
subparsers._prog_prefixから派生しますparser.prog(詳細についてはadd_subparsersコードを参照してください)。ただし、progパラメーターを指定することもできます。
sp1 = subparsers.add_parser('prog1', parents = [parser1, parser2], prog='prog1')
これにより、行の文字列が修正されますhelp。ただし、文字列も変更されますusage。
サブパーサーに明示的に与えることもできますusage:
sp1 = subparsers.add_parser('prog1', parents = [parser1, parser2], prog='prog1', usage='master prog1 ...')
手術をしないと、使用法を変更せずにヘルプラインをHelpFormatter変更することはできないと思います.prog
また、 のヘルプ ラインを変更せずparentsに のヘルプ ラインを変更することはできません。 参照によって Action オブジェクトをコピーするため、2 つのサブパーサーが Action オブジェクトを共有します。prog1 fooprog2 fooparentsfoo
parents少なくともこの引数については、多くの人がアプローチを放棄し、名前をハードコーディングする必要があります。引数を複数のサブパーサーに追加する必要がある場合は、それを容易にするための小さなユーティリティ関数を記述します。このparentsメカニズムは (通常は) 便利で、入力や編集の手間を省くものです。
この変更されたスクリプトは私のポイントを説明します
parser = ArgumentParser(prog = 'master')
parser1 = ArgumentParser(add_help = False)
fooarg=parser1.add_argument('foo', type = int, help = 'foo prog: %(prog)s') # Line of interest
parser2 = ArgumentParser(add_help = False)
parser2.add_argument('--bar', type = int, default = 0, help = 'Start at this number')
parser3 = ArgumentParser(add_help = False)
parser3.add_argument('--baz', type = str, default = 'DEFAULT', help = 'Init file with this text')
subparsers = parser.add_subparsers(prog='subparsers')
sp1 = subparsers.add_parser('prog1', parents = [parser1, parser2], prog='name1')
sp2 = subparsers.add_parser('prog2', parents = [parser1, parser3])
#parser.print_help()
# fooarg is an Action for both subparsers
# print(fooarg.help)
# fooarg.help = 'FOO HELP'
print('==>sp1 prog:', sp1.prog)
sp1.print_help()
print('==>sp2 prog:', sp2.prog)
sp2.print_help()
sp1.prog = 'custom'
sp1.print_help()
# addition
fooarg.default = 'default'
fooarg.metavar = 'META'
fooarg.help = 'prog: %(prog)s, dest=%(dest)s, nargs=%(nargs)s, type=%(type)s, default=%(default)s'
sp1.print_help()
この最後のビットは、一連の Action 属性をヘルプに追加します。しかしprog、から来る唯一のものですparser:
positional arguments:
META prog: custom, dest=foo, nargs=None, type=int, default=default