1. ホーム
  2. パイソン

[解決済み】Argparse: デフォルト値を'--help'に含める方法?

2022-03-24 13:33:22

質問

以下のような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-time をサブクラス化する必要があるのでしょうか? help のフォーマッタは?

解決方法は?

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

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

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

もうひとつのフォーマッタクラスが利用できます。 ArgumentDefaultsHelpFormatter は、各引数のデフォルト値に関する情報を追加します。

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

すると、スキャンタイムオプションの正確な出力はこうなります。

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