389

次の argparse スニペットがあるとします。

diags.cmdln_parser.add_argument( '--scan-time',
                     action  = 'store',
                     nargs   = '?',
                     type    = int,
                     default = 5,
                     help    = "Wait SCAN-TIME seconds between status checks.")

現在、以下を--help返します。

usage: connection_check.py [-h]
                             [--version] [--scan-time [SCAN_TIME]]

          Test the reliability/uptime of a connection.



optional arguments:
-h, --help            show this help message and exit
--version             show program's version number and exit
--scan-time [SCAN_TIME]
                    Wait SCAN-TIME seconds between status checks.

私は次のようなものを好むでしょう:

--scan-time [SCAN_TIME]
                    Wait SCAN-TIME seconds between status checks.
                    (Default = 5)

ヘルプ フォーマッタ コードをのぞくと、限られたオプションが明らかになりました。同様の方法でargparseデフォルト値を出力する賢い方法はありますか、それともフォーマッタをサブクラス化する必要がありますか?--scan-timehelp

4

4 に答える 4

562

argparse.ArgumentDefaultsHelpFormatterフォーマッタを使用します:

parser = argparse.ArgumentParser(
    # ... other options ...
    formatter_class=argparse.ArgumentDefaultsHelpFormatter)

ドキュメントを引用するには:

利用可能な他のフォーマッタ クラスArgumentDefaultsHelpFormatterは、各引数のデフォルト値に関する情報を追加します。

これは、ヘルプ テキストが定義されている引数にのみ適用されることに注意してください。引数に値がないhelp場合、デフォルト値に関する情報を に追加するためのヘルプ メッセージはありませ

scan-time オプションの正確な出力は次のようになります。

  --scan-time [SCAN_TIME]
                        Wait SCAN-TIME seconds between status checks.
                        (default: 5)
于 2012-08-28T00:27:58.853 に答える
247

'%(default)s'表示される内容を制御するには、help パラメータに追加します。

parser.add_argument("--type", default="toto", choices=["toto","titi"],
                              help = "type (default: %(default)s)")

:

  • + 括弧内のデフォルト + フォーマット文字 (または f-stringにある%中括弧と混同しないでください){default}format
  • 最後に型表現の「指定子文字」を追加することを忘れないでください (つまりs、文字列、d整数、f浮動小数点数など)。
  • 通常の「printf」フォーマット指定子を追加することもできます (float の桁数、先頭のゼロなど)。

詳細については、 printf のドキュメントを参照してください。

于 2013-08-29T10:01:22.850 に答える
4

ヘルプ出力に値を自動的に含めることができると便利なことがよくありますが、 ( で)明示的に指定されたものだけです。前述の方法には、この点でいくつかの欠点があります。defaultdefault=..

  • このArgumentDefaultsHelpFormatter メソッド(default: None)は、デフォルトが明示的に指定されていないすべての引数と(default: False)、'flags' ( ) を出力しaction='store_true'ます。これにより、ヘルプ出力が乱雑になります。これを回避するには、default=argparse.SUPPRESSそのような引数ごとに手動で追加する必要があります。

  • この'%(default)s' メソッドでは、ヘルプに出力たいすべての引数のhelp文字列に手動で追加する必要があります。

どちらの方法でも、「正しい」デフォルトのみを出力するために手動で介入する必要があります。これを自動的に行う 1 つの方法は、 を拡張してs およびs のデフォルト値ArgumentDefaultsHelpFormatterを無視することです。NoneFalse

class ExplicitDefaultsHelpFormatter(argparse.ArgumentDefaultsHelpFormatter):
    def _get_help_string(self, action):
        if action.default in (None, False):
            return action.help
        return super()._get_help_string(action)

の代わりに使用しますArgumentDefaultsHelpFormatter

parser = argparse.ArgumentParser(
        formatter_class=ExplicitDefaultsHelpFormatter
                )

これにより、明示的に設定されdefaultた値のみがヘルプ出力に出力されます。

注: 引数のデフォルトが明示的にNoneまたはFalseに設定されている場合、このクラスのヘルプには表示されません。ヘルプ出力で必要な場合は、その引数に%(default)s文字列を追加します。help

于 2021-04-22T06:43:52.017 に答える