*
の書式設定は、[]
のネストされたものとして固定されています。ゼロ、1つ以上の文字列が受け入れられるという意味を伝えることになっています。また、それは使用法とヘルプラインの両方に影響します。 Metavarでは何らかの制御が可能ですが、完全な置き換えはできません。
In [461]: p=argparse.ArgumentParser()
In [462]: a=p.add_argument('-f','--foo',nargs='*')
In [463]: p.print_help()
usage: ipython3 [-h] [-f [FOO [FOO ...]]]
optional arguments:
-h, --help show this help message and exit
-f [FOO [FOO ...]], --foo [FOO [FOO ...]]
1つの文字列:
In [464]: a.metavar = 'F'
In [465]: p.print_help()
usage: ipython3 [-h] [-f [F [F ...]]]
optional arguments:
-h, --help show this help message and exit
-f [F [F ...]], --foo [F [F ...]]
タプル:ヘルプの
In [467]: a.metavar = ('A','B')
In [468]: p.print_help()
usage: ipython3 [-h] [-f [A [B ...]]]
optional arguments:
-h, --help show this help message and exit
-f [A [B ...]], --foo [A [B ...]]
コンプリートsuupression:
In [469]: a.help = argparse.SUPPRESS
In [470]: p.print_help()
usage: ipython3 [-h]
optional arguments:
-h, --help show this help message and exit
ヘルプフォーマッタをサブクラス化のオプションに常にあります、 1つまたは2つの方法を変更すること。
metavarを使用していますHelpFormatter
方法:
def _format_args(self, action, default_metavar):
get_metavar = self._metavar_formatter(action, default_metavar)
if action.nargs is None:
result = '%s' % get_metavar(1)
elif action.nargs == OPTIONAL:
result = '[%s]' % get_metavar(1)
elif action.nargs == ZERO_OR_MORE:
result = '[%s [%s ...]]' % get_metavar(2)
elif action.nargs == ONE_OR_MORE:
result = '%s [%s ...]' % get_metavar(2)
elif action.nargs == REMAINDER:
result = '...'
elif action.nargs == PARSER:
result = '%s ...' % get_metavar(1)
else:
formats = ['%s' for _ in range(action.nargs)]
result = ' '.join(formats) % get_metavar(action.nargs)
return result
あなたのコードは、(引用符が欠落しているもの)をタイプミスがあり –
あなたが本当に '' NARGS = '*' が必要ですか?複数のホスト名またはゼロのホスト名は許可されていますか? –
@ Jean-FrançoisFabre - あなたが正しいですが、私はそれを修正しましたが、誤植は質問にのみあり、実行中のコードにはありません。 – deez