のサブコマンドの遅延ロードをサポートし、ソリューションを提供できない可能性があります。
sp1.prog
は、usage
の形式とヘルプラインの%(prog)s
という値の両方で使用されています。そしてそれはusage
行を念頭に置いて作られています。
sp1 = subparsers.add_parser('prog1', parents = [parser1, parser2])
===============はパーサを作成し、parents
から引数を追加します。 add_parser
はclass _SubParsersAction
のメソッドです(サブパーザのActionクラス)。そして、そのパーサーのprog
属性を使用して作成されます。
if kwargs.get('prog') is None:
kwargs['prog'] = '%s %s' % (self._prog_prefix, name)
あなたはprint(sp1.prog)
でこの属性を見ることができるはずです(私は「マスターPROG1」期待)。これは、usage
行とヘルプ行のいずれかで使用される値で、%(prog)s
です。
subparsers._prog_prefix
は、parser.prog
(詳細はadd_subparsers
コードを参照)に由来します。
sp1 = subparsers.add_parser('prog1', parents = [parser1, parser2], prog='prog1')
help
行の文字列を修正する必要があります。しかし、あなたはまた、prog
パラメータを指定することができます。しかし、それはまた、usage
の文字列を変更します。私はあなたにも、使用中にそれを変更することなく、ヘルプラインでprog
を変更することができるとは思わないHelpFormatter
に手術を行わず
sp1 = subparsers.add_parser('prog1', parents = [parser1, parser2], prog='prog1', usage='master prog1 ...')
:
はまたsubparser明示usage
を与えることができます。
の方法ではprog1 foo
のヘルプラインを変更することはできません。prog2 foo
も変更する必要はありません。 parents
はアクションオブジェクトを参照でコピーするため、2つのサブパパラは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()
私のポイントを説明します。この最後のビットがアクション属性の束を追加します助けに。しかしprog
は、parser
から来る唯一のものです。
positional arguments:
META prog: custom, dest=foo, nargs=None, type=int, default=default