2017-09-16 7 views
2

をスクランブルよく見える:のpython argparse NARGSショーでlistオプションを使用して、私はオプションを受け入れるようにargparseを使用していますし、それらのいずれかがリストであるヘルプメッセージ

optional arguments: 
    -h, --help   show this help message and exit 
    -S , --size   Number of results to show 
    -H [ [ ...]], --hostname [ [ ...]] 
         Hostname list 

私はホスト名を残りの引数のように見えるようにするにはどうすればよいですか? metavar = ''トリックはここでは機能しません。

ありがとうございました。

+0

あなたのコードは、(引用符が欠落しているもの)をタイプミスがあり –

+0

あなたが本当に '' NARGS = '*' が必要ですか?複数のホスト名またはゼロのホスト名は許可されていますか? –

+0

@ Jean-FrançoisFabre - あなたが正しいですが、私はそれを修正しましたが、誤植は質問にのみあり、実行中のコードにはありません。 – deez

答えて

1

*の書式設定は、[]のネストされたものとして固定されています。ゼロ、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 
関連する問題