何が起こっているのか説明できますが、解決策を提供できない場合があります。
簡単に言えば、はその形式とヘルプ ラインの値のsp1.prog
両方で使用されます。そして、それを念頭に置いて構築されています。usage
%(prog)s
usage
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 foo
prog2 foo
parents
foo
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