python:argparse

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
python:argparse [2016/11/02 09:51] mumeiyamibitopython:argparse [2019/06/26 13:17] (現在) – [基本] mumeiyamibito
行 7: 行 7:
  
 ===== 使い方 ===== ===== 使い方 =====
 +==== 基本 ====
 +
   * 手順   * 手順
     - import で argparse モジュール読み込み     - import で argparse モジュール読み込み
行 58: 行 60:
           * 指定することにより、受け取った引数を型変換する           * 指定することにより、受け取った引数を型変換する
           * 今回の場合は、整数型の引数を変数で受け取ることができる           * 今回の場合は、整数型の引数を変数で受け取ることができる
-        * ''required = True'': True でオプションが必須になる+        * ''required = True'': 必須オプション (True でオプションが必須になる)
         * ''action = "store_true"'': オプションの有無で値を決定する         * ''action = "store_true"'': オプションの有無で値を決定する
           * オプションでフラグにするような場合 (引数が不要の場合) に使う           * オプションでフラグにするような場合 (引数が不要の場合) に使う
           * ''store_true'' は、オプションが指定された時に変数に ''True'' を代入する           * ''store_true'' は、オプションが指定された時に変数に ''True'' を代入する
           * ''store_false'' は、指定された時に変数に ''False'' を代入する           * ''store_false'' は、指定された時に変数に ''False'' を代入する
-        *  
     * ''args'': 引数オブジェクト     * ''args'': 引数オブジェクト
 +
 +==== ヘルプ表示の時に引数をグループでまとめる場合 ====
 +  * ヘルプ表示を分かりやすくするため、引数をグループでまとめる場合は、''add_argument_group()'' を用いる。\\ <code python>
 +parser = argparse.ArgumentParser(description = "test", formatter_class=argparse.RawTextHelpFormatter)
 +
 +group_a = parser.add_argument_group("Group A")
 +group_a.add_argument("foo", help = "help message for foo")
 +group_a.add_argument("bar", help = "help message for bar")
 +
 +group_b = parser.add_argument_group("Group B")
 +group_b.add_argument("hoge", help = "help message for hoge")
 +
 +args = parser.parse_args()
 +</code>
 +    * ''parser'' にグループ (''Group A'' と ''Group B'') を追加した変数 (''group_a'' と ''group_b'') を作成し、それぞれに引数を追加していく。
 +  * 上記のヘルプを表示した場合、下のように表示される。\\ <code>
 +$ test.py --help
 +usage: test.py [-h] foo bar hoge
 +
 +test
 +
 +optional arguments:
 +  -h, --help  show this help message and exit
 +
 +Group A:
 +  foo         help message for foo
 +  bar         help message for bar
 +
 +Group B:
 +  hoge        help message for hoge
 +</code>
 +
 +==== いずれかのオプションのみ有効にする場合 ====
 +  * 引数 A を指定した時は引数 B を無効、あるいはその逆といった引数を指定したい場合は、''add_mutually_exclusive_group()'' を使う。\\ <code python>
 +parser = argparse.ArgumentParser(description = "test", formatter_class=argparse.RawTextHelpFormatter)
 +
 +group = parser.add_mutually_exclusive_group()
 +group.add_argument("--foo", help = "help message for foo")
 +group.add_argument("--bar", help = "help message for bar")
 +
 +args = parser.parse_args()
 +</code>
 +    * 引数をグループでまとめる ''add_argument_group()'' と同様に、グループ ''group'' を作成し、その中に同時に指定できない引数を加える (加える引数は 2 つ以上でも OK)。
 +    * 追加する引数はオプション引数であることが必須。
 +    * いずれかの引数を必須項目にしたい場合は、引数にそれぞれ ''required'' を指定するのではなく、''add_mutually_exclusive_group(required = True)'' にする (引数に ''required'' を付けるとエラーになる)。
 +
 +===== Tips =====
 +==== 特定のオプション引数が使用された場合に別のオプションを必須にする ====
 +  * オプション A が指定された場合に、オプション B を必須にする場合
 +    * A と B は必須ではない (A、B なし → True)
 +    * A が指定された時に B が必須になる (A、B → True / A → False)
 +    * B は単独で利用できる (B → True)
 +  * コード\\ <code python>
 +import argparse
 +import sys
 +parser = argparse.ArgumentParser(description = "...")
 +parser.add_argument("-a", required = False, help = "A requires B")
 +parser.add_argument("-b", required = "-a" in sys.argv, help = "B")
 +parser.add_argument("-c", help = "C")
 +args = parser.parse_args()
 +</code>
 +    * やっていることは、引数を sys.argv で取ってきて、その引数の中にトリガーとなる ''-a'' が含まれているかを調べて、''True'' か ''False'' を動的に ''required'' に与えているだけ。
 +  * 参考サイト: [[https://stackoverflow.com/questions/25626109/python-argparse-conditionally-required-arguments | Python Argparse conditionally required arguments - Stack Overflow]]
  
 ===== 参考サイト ===== ===== 参考サイト =====
  • python/argparse.1478047864.txt.gz
  • 最終更新: 2016/11/02 09:51
  • by mumeiyamibito