argparse —コマンドラインオプション、引数、およびサブコマンドのパーサー—Pythonドキュメント
argparse —コマンドラインオプション、引数、およびサブコマンドのパーサー
バージョン3.2の新機能。
ソースコード: :source: `Lib / argparse.py`
チュートリアル
このページには、APIリファレンス情報が含まれています。 Pythonコマンドライン解析のより穏やかな紹介については、 argparseチュートリアルをご覧ください。
argparse モジュールを使用すると、ユーザーフレンドリーなコマンドラインインターフェイスを簡単に作成できます。 プログラムは必要な引数を定義し、 argparse は sys.argv からそれらを解析する方法を理解します。 argparse モジュールは、ヘルプメッセージと使用法メッセージも自動的に生成し、ユーザーがプログラムに無効な引数を指定するとエラーを発行します。
例
次のコードは、整数のリストを取得し、合計または最大値を生成するPythonプログラムです。
上記のPythonコードがprog.py
というファイルに保存されているとすると、コマンドラインで実行でき、役立つヘルプメッセージが表示されます。
$ python prog.py -h
usage: prog.py [-h] [--sum] N [N ...]
Process some integers.
positional arguments:
N an integer for the accumulator
optional arguments:
-h, --help show this help message and exit
--sum sum the integers (default: find the max)
適切な引数を指定して実行すると、コマンドライン整数の合計または最大値が出力されます。
$ python prog.py 1 2 3 4
4
$ python prog.py 1 2 3 4 --sum
10
無効な引数が渡されると、エラーが発生します。
$ python prog.py a b c
usage: prog.py [-h] [--sum] N [N ...]
prog.py: error: argument N: invalid int value: 'a'
次のセクションでは、この例について説明します。
パーサーの作成
argparse を使用する最初のステップは、 ArgumentParser オブジェクトを作成することです。
ArgumentParser オブジェクトは、コマンドラインをPythonデータ型に解析するために必要なすべての情報を保持します。
引数の追加
ArgumentParser にプログラム引数に関する情報を入力するには、 add_argument()メソッドを呼び出します。 通常、これらの呼び出しは、 ArgumentParser に、コマンドラインで文字列を取得してオブジェクトに変換する方法を指示します。 この情報は、 parse_args()が呼び出されたときに保存および使用されます。 例えば:
後で parse_args()を呼び出すと、integers
とaccumulate
の2つの属性を持つオブジェクトが返されます。 integers
属性は1つ以上のintのリストになり、--sum
があった場合、accumulate
属性は sum()関数になります。コマンドラインで指定するか、そうでない場合は max()関数で指定します。
引数の解析
ArgumentParser は、 parse_args()メソッドを介して引数を解析します。 これにより、コマンドラインが検査され、各引数が適切なタイプに変換されてから、適切なアクションが呼び出されます。 ほとんどの場合、これは、コマンドラインから解析された属性から単純な名前空間オブジェクトが構築されることを意味します。
スクリプトでは、 parse_args()は通常、引数なしで呼び出され、 ArgumentParser は sys.argv からコマンドライン引数を自動的に決定します。
ArgumentParserオブジェクト
- class argparse.ArgumentParser(prog=None, usage=None, description=None, epilog=None, parents=[], formatter_class=argparse.HelpFormatter, prefix_chars='-', fromfile_prefix_chars=None, argument_default=None, conflict_handler='error', add_help=True, allow_abbrev=True, exit_on_error=True)
新しい ArgumentParser オブジェクトを作成します。 すべてのパラメータは、キーワード引数として渡す必要があります。 各パラメータには、以下に独自の詳細な説明がありますが、簡単に言うと次のとおりです。
prog -プログラムの名前(デフォルト:
sys.argv[0]
)Usage -プログラムの使用法を説明する文字列(デフォルト:パーサーに追加された引数から生成)
description -引数ヘルプの前に表示するテキスト(デフォルト:なし)
epilog -引数ヘルプの後に表示するテキスト(デフォルト:なし)
parents -引数も含める必要がある ArgumentParser オブジェクトのリスト
formatter_class -ヘルプ出力をカスタマイズするためのクラス
prefix_chars -オプションの引数の前に付ける文字のセット(デフォルト: '-')
fromfile_prefix_chars -追加の引数を読み取るファイルのプレフィックスとなる文字のセット(デフォルト:
None
)arguments_default -引数のグローバルデフォルト値(デフォルト:
None
)conflict_handler -競合するオプションを解決するための戦略(通常は不要)
add_help -
-h/--help
オプションをパーサーに追加します(デフォルト:True
)allow_abbrev -省略形が明確な場合、長いオプションを省略できるようにします。 (デフォルト:
True
)exit_on_error -エラーが発生したときにArgumentParserがエラー情報とともに終了するかどうかを決定します。 (デフォルト:
True
)
バージョン3.5で変更: allow_abbrev パラメーターが追加されました。
バージョン3.8での変更:以前のバージョンでは、 allow_abbrev は、
-vv
などの短いフラグのグループ化も無効にして-v -v
を意味していました。バージョン3.9で変更: exit_on_error パラメーターが追加されました。
次のセクションでは、これらのそれぞれの使用方法について説明します。
prog
デフォルトでは、 ArgumentParser オブジェクトはsys.argv[0]
を使用して、ヘルプメッセージにプログラムの名前を表示する方法を決定します。 このデフォルトは、ヘルプメッセージがコマンドラインでプログラムが呼び出された方法と一致するため、ほとんどの場合望ましいものです。 たとえば、次のコードを持つmyprogram.py
という名前のファイルについて考えてみます。
このプログラムのヘルプには、プログラム名としてmyprogram.py
が表示されます(プログラムがどこから呼び出されたかに関係なく)。
$ python myprogram.py --help
usage: myprogram.py [-h] [--foo FOO]
optional arguments:
-h, --help show this help message and exit
--foo FOO foo help
$ cd ..
$ python subdir/myprogram.py --help
usage: myprogram.py [-h] [--foo FOO]
optional arguments:
-h, --help show this help message and exit
--foo FOO foo help
このデフォルトの動作を変更するには、prog=
引数を ArgumentParser に使用して別の値を指定できます。
sys.argv[0]
またはprog=
引数から決定されたかどうかにかかわらず、プログラム名は%(prog)s
形式指定子を使用してメッセージを支援するために使用できることに注意してください。
利用方法
デフォルトでは、 ArgumentParser は、含まれている引数から使用法メッセージを計算します。
デフォルトのメッセージは、usage=
キーワード引数で上書きできます。
%(prog)s
形式指定子を使用して、使用法メッセージにプログラム名を入力できます。
説明
ArgumentParser コンストラクターへのほとんどの呼び出しは、description=
キーワード引数を使用します。 この引数は、プログラムの機能と動作について簡単に説明しています。 ヘルプメッセージでは、コマンドラインの使用法文字列とさまざまな引数のヘルプメッセージの間に説明が表示されます。
デフォルトでは、説明は指定されたスペースに収まるように行で折り返されます。 この動作を変更するには、 formatter_class 引数を参照してください。
エピローグ
一部のプログラムは、引数の説明の後にプログラムの追加の説明を表示することを好みます。 このようなテキストは、 ArgumentParser のepilog=
引数を使用して指定できます。
description 引数と同様に、epilog=
テキストはデフォルトで行折り返しされますが、この動作は ArgumentParser の formatter_class 引数で調整できます。 ]。
両親
場合によっては、複数のパーサーが共通の引数セットを共有します。 これらの引数の定義を繰り返すのではなく、すべての共有引数を持ち、parents=
引数から ArgumentParser に渡される単一のパーサーを使用できます。 parents=
引数は、 ArgumentParser オブジェクトのリストを取得し、それらからすべての定位置アクションとオプションアクションを収集し、これらのアクションを構築中の ArgumentParser オブジェクトに追加します。
ほとんどの親パーサーはadd_help=False
を指定することに注意してください。 それ以外の場合、 ArgumentParser は2つの-h/--help
オプション(1つは親に、もう1つは子に)を参照してエラーを発生させます。
ノート
parents=
を介してパーサーを渡す前に、パーサーを完全に初期化する必要があります。 子パーサーの後に親パーサーを変更した場合、それらの変更は子に反映されません。
formatter_class
ArgumentParser オブジェクトを使用すると、代替の書式設定クラスを指定して、ヘルプの書式設定をカスタマイズできます。 現在、そのようなクラスは4つあります。
- class argparse.RawDescriptionHelpFormatter
class argparse.RawTextHelpFormatter
class argparse.ArgumentDefaultsHelpFormatter
class argparse.MetavarTypeHelpFormatter
RawDescriptionHelpFormatter および RawTextHelpFormatter を使用すると、テキストによる説明の表示方法をより細かく制御できます。 デフォルトでは、 ArgumentParser オブジェクトはコマンドラインヘルプメッセージの description および epilog テキストを行折り返します。
RawDescriptionHelpFormatter をformatter_class=
として渡すことは、 description および epilog がすでに正しくフォーマットされているため、行で折り返す必要がないことを示します。
RawTextHelpFormatter は、引数の説明を含む、あらゆる種類のヘルプテキストの空白を維持します。 ただし、複数の新しい行が1つに置き換えられます。 複数の空白行を保持する場合は、改行の間にスペースを追加します。
ArgumentDefaultsHelpFormatter は、デフォルト値に関する情報を各引数ヘルプメッセージに自動的に追加します。
MetavarTypeHelpFormatter は、各引数の type 引数の名前を、その値の表示名として使用します(通常のフォーマッターのように dest を使用するのではありません)。
prefix_chars
ほとんどのコマンドラインオプションは、プレフィックスとして-
を使用します。 -f/--foo
。 異なるまたは追加のプレフィックス文字をサポートする必要があるパーサー。 +f
や/foo
などのオプションの場合、ArgumentParserコンストラクターのprefix_chars=
引数を使用してそれらを指定できます。
prefix_chars=
引数のデフォルトは'-'
です。 -
を含まない文字セットを指定すると、-f/--foo
オプションが使用できなくなります。
fromfile_prefix_chars
たとえば、特に長い引数リストを処理する場合、コマンドラインで入力するのではなく、引数のリストをファイルに保持する方が理にかなっている場合があります。 fromfile_prefix_chars=
引数が ArgumentParser コンストラクターに指定された場合、指定された文字のいずれかで始まる引数はファイルとして扱われ、それらに含まれる引数に置き換えられます。 例えば:
ファイルから読み取られる引数は、デフォルトで1行に1つである必要があり(ただし、 convert_arg_line_to_args()も参照)、コマンドラインの元のファイル参照引数と同じ場所にあるかのように扱われます。 したがって、上記の例では、式['-f', 'foo', '@args.txt']
は式['-f', 'foo', '-f', 'bar']
と同等であると見なされます。
fromfile_prefix_chars=
引数のデフォルトはNone
です。これは、引数がファイル参照として扱われることはないことを意味します。
引数のデフォルト
一般に、引数のデフォルトは、デフォルトを add_argument()に渡すか、特定の名前と値のペアのセットを使用して set_defaults()メソッドを呼び出すことによって指定されます。 ただし、引数にパーサー全体のデフォルトを1つ指定すると便利な場合があります。 これは、argument_default=
キーワード引数を ArgumentParser に渡すことで実現できます。 たとえば、 parse_args()呼び出しでの属性作成をグローバルに抑制するために、argument_default=SUPPRESS
を提供します。
allow_abbrev
通常、引数リストを ArgumentParser の parse_args()メソッドに渡すと、は長いオプションの省略形を認識します。
この機能は、allow_abbrev
をFalse
に設定することで無効にできます。
バージョン3.5の新機能。
conflict_handler
ArgumentParser オブジェクトは、同じオプション文字列を持つ2つのアクションを許可しません。 デフォルトでは、 ArgumentParser オブジェクトは、すでに使用されているオプション文字列を使用して引数を作成しようとすると、例外を発生させます。
時々(例えば 親)を使用する場合、同じオプション文字列で古い引数を単純にオーバーライドすると便利な場合があります。 この動作を実現するには、値'resolve'
を ArgumentParser のconflict_handler=
引数に指定できます。
ArgumentParser オブジェクトは、すべてのオプション文字列がオーバーライドされた場合にのみアクションを削除することに注意してください。 したがって、上記の例では、--foo
オプション文字列のみがオーバーライドされたため、古い-f/--foo
アクションは-f
アクションとして保持されます。
add_help
デフォルトでは、ArgumentParserオブジェクトは、パーサーのヘルプメッセージを表示するだけのオプションを追加します。 たとえば、次のコードを含むmyprogram.py
という名前のファイルについて考えてみます。
-h
または--help
がコマンドラインで指定されている場合、ArgumentParserヘルプが出力されます。
$ python myprogram.py --help
usage: myprogram.py [-h] [--foo FOO]
optional arguments:
-h, --help show this help message and exit
--foo FOO foo help
場合によっては、このヘルプオプションの追加を無効にすると便利なことがあります。 これは、False
をadd_help=
引数として ArgumentParser に渡すことで実現できます。
ヘルプオプションは通常-h/--help
です。 これの例外は、prefix_chars=
が指定されていて、-
が含まれていない場合です。この場合、-h
および--help
は有効なオプションではありません。 この場合、prefix_chars
の最初の文字は、ヘルプオプションのプレフィックスとして使用されます。
exit_on_error
通常、無効な引数リストを ArgumentParser の parse_args()メソッドに渡すと、エラー情報が表示されて終了します。
ユーザーが手動でエラーをキャッチしたい場合は、exit_on_error
をFalse
に設定することで機能を有効にできます。
バージョン3.9の新機能。
add_argument()メソッド
- ArgumentParser.add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])
- 単一のコマンドライン引数を解析する方法を定義します。 各パラメータには、以下に独自の詳細な説明がありますが、簡単に言うと次のとおりです。
- nameまたはflags -名前またはオプション文字列のリスト。例:
foo
または-f, --foo
。 - action -この引数がコマンドラインで検出されたときに実行される基本的なアクションのタイプ。
- nargs -消費する必要のあるコマンドライン引数の数。
- const -一部の action および nargs の選択に必要な定数値。
- default -引数がコマンドラインにない場合、および名前空間オブジェクトにない場合に生成される値。
- type -コマンドライン引数の変換先のタイプ。
- choices -引数の許容値のコンテナー。
- required -コマンドラインオプションを省略できるかどうか(オプションのみ)。
- help -引数の機能の簡単な説明。
- metavar -使用法メッセージの引数の名前。
- dest - parse_args()によって返されるオブジェクトに追加される属性の名前。
- nameまたはflags -名前またはオプション文字列のリスト。例:
次のセクションでは、これらのそれぞれの使用方法について説明します。
名前またはフラグ
add_argument()メソッドは、-f
や--foo
などのオプションの引数、またはファイル名のリストなどの位置引数が必要かどうかを認識している必要があります。 したがって、 add_argument()に渡される最初の引数は、一連のフラグまたは単純な引数名のいずれかである必要があります。 たとえば、オプションの引数は次のように作成できます。
一方、位置引数は次のように作成できます。
parse_args()が呼び出されると、オプションの引数は-
プレフィックスで識別され、残りの引数は定位置であると見なされます。
アクション
ArgumentParser オブジェクトは、コマンドライン引数をアクションに関連付けます。 ほとんどのアクションは、 parse_args()によって返されるオブジェクトに属性を追加するだけですが、これらのアクションは、それらに関連付けられたコマンドライン引数を使用してほぼすべてを実行できます。 action
キーワード引数は、コマンドライン引数の処理方法を指定します。 提供されるアクションは次のとおりです。
'store'
-これは引数の値を格納するだけです。 これがデフォルトのアクションです。 例えば:'store_const'
-これは、 const キーワード引数で指定された値を格納します。'store_const'
アクションは、ある種のフラグを指定するオプションの引数とともに最も一般的に使用されます。 例えば:'store_true'
および'store_false'
-これらは、値True
およびFalse
をそれぞれ格納するために使用される'store_const'
の特殊なケースです。 さらに、それぞれFalse
とTrue
のデフォルト値を作成します。 例えば:'append'
-これはリストを格納し、各引数値をリストに追加します。 これは、オプションを複数回指定できるようにする場合に便利です。 使用例:'append_const'
-これはリストを格納し、 const キーワード引数で指定された値をリストに追加します。 ( const キーワード引数のデフォルトはNone
であることに注意してください。)'append_const'
アクションは通常、複数の引数が定数を同じリストに格納する必要がある場合に役立ちます。 例えば:'count'
-これは、キーワード引数が発生する回数をカウントします。 たとえば、これは詳細レベルを上げるのに役立ちます。0 に明示的に設定されていない限り、デフォルトは
None
になることに注意してください。'help'
-これは、現在のパーサーのすべてのオプションの完全なヘルプメッセージを出力して、終了します。 デフォルトでは、ヘルプアクションがパーサーに自動的に追加されます。 出力の作成方法の詳細については、 ArgumentParser を参照してください。'version'
-これは、 add_argument()呼び出しでversion=
キーワード引数を予期し、バージョン情報を出力して、呼び出されると終了します。'extend'
-これはリストを格納し、各引数値をリストに拡張します。 使用例:バージョン3.8の新機能。
同じインターフェイスを実装するActionサブクラスまたは他のオブジェクトを渡すことにより、任意のアクションを指定することもできます。 BooleanOptionalAction
はargparse
で利用可能であり、--foo
や--no-foo
などのブールアクションのサポートを追加します。
バージョン3.9の新機能。
カスタムアクションを作成するための推奨される方法は、 Action を拡張して、__call__
メソッド、およびオプションで__init__
およびformat_usage
メソッドをオーバーライドすることです。
カスタムアクションの例:
詳細については、アクションを参照してください。
nargs
ArgumentParserオブジェクトは通常、単一のコマンドライン引数を実行する単一のアクションに関連付けます。 nargs
キーワード引数は、異なる数のコマンドライン引数を1つのアクションに関連付けます。 サポートされている値は次のとおりです。
N
(整数)。 コマンドラインからのN
引数は、リストにまとめられます。 例えば:nargs=1
は1つのアイテムのリストを生成することに注意してください。 これは、アイテムが単独で作成されるデフォルトとは異なります。
'?'
。 可能であれば、1つの引数がコマンドラインから消費され、単一のアイテムとして生成されます。 コマンドライン引数が存在しない場合、 default の値が生成されます。 オプションの引数の場合、追加のケースがあることに注意してください。オプションの文字列は存在しますが、コマンドライン引数は続きません。 この場合、 const からの値が生成されます。 これを説明するためのいくつかの例:nargs='?'
のより一般的な使用法の1つは、オプションの入力ファイルと出力ファイルを許可することです。
'*'
。 存在するすべてのコマンドライン引数がリストにまとめられます。nargs='*'
で複数の位置引数を使用することは一般的にあまり意味がありませんが、nargs='*'
で複数のオプションの引数を使用することは可能です。 例えば:
'+'
。'*'
と同様に、存在するすべてのコマンドライン引数がリストにまとめられます。 さらに、コマンドライン引数が1つも存在しない場合は、エラーメッセージが生成されます。 例えば:
nargs
キーワード引数が指定されていない場合、消費される引数の数は action によって決定されます。 通常、これは、単一のコマンドライン引数が消費され、単一の項目(リストではない)が生成されることを意味します。
const
add_argument()のconst
引数は、コマンドラインから読み取られないが、さまざまな ArgumentParser アクションに必要な定数値を保持するために使用されます。 それの2つの最も一般的な使用法は次のとおりです。
- add_argument()が
action='store_const'
またはaction='append_const'
で呼び出されたとき。 これらのアクションは、 parse_args()によって返されるオブジェクトの属性の1つにconst
値を追加します。 例については、 action の説明を参照してください。 - add_argument()がオプション文字列(
-f
または--foo
など)およびnargs='?'
で呼び出された場合。 これにより、オプションの引数が作成され、その後に0個または1個のコマンドライン引数を続けることができます。 コマンドラインを解析するときに、コマンドライン引数が後に続くオプション文字列が検出された場合、代わりにconst
の値が想定されます。 例については、 nargs の説明を参照してください。
'store_const'
および'append_const'
アクションでは、const
キーワード引数を指定する必要があります。 その他のアクションの場合、デフォルトでNone
になります。
ディフォルト
コマンドラインでは、すべてのオプションの引数と一部の位置引数を省略できます。 add_argument()のdefault
キーワード引数(値はデフォルトでNone
)は、コマンドライン引数が存在しない場合に使用する値を指定します。 オプションの引数の場合、default
値は、オプション文字列がコマンドラインに存在しない場合に使用されます。
ターゲット名前空間にすでに属性が設定されている場合、アクション default はそれを上書きしません。
default
値が文字列の場合、パーサーは値をコマンドライン引数であるかのように解析します。 特に、パーサーは、名前空間の戻り値に属性を設定する前に、 type 変換引数が指定されている場合はそれを適用します。 それ以外の場合、パーサーは値をそのまま使用します。
nargs が?
または*
に等しい位置引数の場合、コマンドライン引数が存在しないときにdefault
値が使用されます。
default=argparse.SUPPRESS
を指定すると、コマンドライン引数が存在しない場合、属性は追加されません。
タイプ
デフォルトでは、パーサーはコマンドライン引数を単純な文字列として読み取ります。 ただし、コマンドライン文字列は、代わりに float や int などの別の型として解釈されることがよくあります。 add_argument()のtype
キーワードを使用すると、必要な型チェックと型変換を実行できます。
type キーワードを default キーワードと一緒に使用すると、型コンバーターはデフォルトが文字列の場合にのみ適用されます。
type
の引数は、単一の文字列を受け入れる任意の呼び出し可能オブジェクトにすることができます。 関数がArgumentTypeError
、 TypeError 、または ValueError を発生させると、例外がキャッチされ、適切にフォーマットされたエラーメッセージが表示されます。 他の例外タイプは処理されません。
一般的な組み込みの型と関数は、型コンバーターとして使用できます。
ユーザー定義関数も使用できます。
>>> def hyphenated(string):
... return '-'.join([word[:4] for word in string.casefold().split()])
...
>>> parser = argparse.ArgumentParser()
>>> _ = parser.add_argument('short_title', type=hyphenated)
>>> parser.parse_args(['"The Tale of Two Cities"'])
Namespace(short_title='"the-tale-of-two-citi')
bool()関数は、型コンバーターとしてはお勧めしません。 空の文字列をFalse
に変換し、空でない文字列をTrue
に変換するだけです。 これは通常、望まれることではありません。
一般に、type
キーワードは、サポートされている3つの例外のうち1つしか発生しない単純な変換にのみ使用する必要がある便利な機能です。 より興味深いエラー処理またはリソース管理を伴うものはすべて、引数が解析された後にダウンストリームで実行する必要があります。
たとえば、JSONまたはYAML変換には複雑なエラーケースがあり、type
キーワードで指定できるよりも適切なレポートが必要です。 JSONDecodeError は適切にフォーマットされておらず、FileNotFound
例外はまったく処理されません。
FileType でさえ、type
キーワードでの使用には制限があります。 1つの引数が FileType を使用し、その後の引数が失敗した場合、エラーが報告されますが、ファイルは自動的に閉じられません。 この場合、パーサーが実行されるまで待ってから、 with ステートメントを使用してファイルを管理することをお勧めします。
固定値のセットに対して単純にチェックする型チェッカーの場合は、代わりに choices キーワードの使用を検討してください。
選択肢
一部のコマンドライン引数は、制限された値のセットから選択する必要があります。 これらは、コンテナオブジェクトを choices キーワード引数として add_argument()に渡すことで処理できます。 コマンドラインが解析されると、引数の値がチェックされ、引数が許容値の1つではなかった場合は、エラーメッセージが表示されます。
choices コンテナへの包含は、 type 変換が実行された後にチェックされるため、 choices コンテナ内のオブジェクトのタイプはと一致する必要があることに注意してください。 ] type 指定:
choices 値として任意のコンテナーを渡すことができるため、 list オブジェクト、 set オブジェクト、およびカスタムコンテナーがすべてサポートされます。
enum.Enum の使用は、使用法、ヘルプ、およびエラーメッセージでの外観を制御することが難しいため、お勧めしません。
フォーマットされた選択肢は、通常 dest から派生するデフォルトの metavar をオーバーライドします。 ユーザーには dest パラメーターが表示されないため、これは通常、必要なものです。 この表示が望ましくない場合(おそらく多くの選択肢があるため)、明示的な metavar を指定するだけです。
必要
一般に、 argparse モジュールは、-f
や--bar
などのフラグが optional 引数を示していると想定します。これは、コマンドラインでいつでも省略できます。 オプション required を作成するには、 add_argument()のrequired=
キーワード引数にTrue
を指定できます。
例が示すように、オプションがrequired
としてマークされている場合、そのオプションがコマンドラインに存在しないと、 parse_args()はエラーを報告します。
ノート
ユーザーはオプションがオプションであると期待しているため、必須オプションは一般に不適切な形式と見なされます。したがって、可能な場合は避ける必要があります。
ヘルプ
help
値は、引数の簡単な説明を含む文字列です。 ユーザーがヘルプを要求すると(通常、コマンドラインで-h
または--help
を使用して)、次のhelp
の説明が各引数とともに表示されます。
help
文字列には、プログラム名や引数 default などの繰り返しを避けるために、さまざまな形式指定子を含めることができます。 使用可能な指定子には、プログラム名、%(prog)s
、および add_argument()へのほとんどのキーワード引数が含まれます。 %(default)s
、%(type)s
など:
ヘルプ文字列は%-f ormattingをサポートしているため、リテラル%
をヘルプ文字列に表示する場合は、%%
としてエスケープする必要があります。
argparse は、help
値をargparse.SUPPRESS
に設定することにより、特定のオプションのヘルプエントリのサイレンシングをサポートします。
metavar
ArgumentParser がヘルプメッセージを生成する場合、予想される各引数を参照するための何らかの方法が必要です。 デフォルトでは、ArgumentParserオブジェクトは dest 値を各オブジェクトの「名前」として使用します。 デフォルトでは、位置引数アクションの場合、 dest 値が直接使用され、オプションの引数アクションの場合、 dest 値は大文字になります。 したがって、dest='bar'
を使用した単一の位置引数は、bar
と呼ばれます。 単一のコマンドライン引数が後に続く必要がある単一のオプションの引数--foo
は、FOO
と呼ばれます。 例:
別名はmetavar
で指定できます。
metavar
は displayed 名のみを変更することに注意してください- parse_args()オブジェクトの属性の名前は、 dest 値によって決定されます。
nargs
の値が異なると、メタ変数が複数回使用される可能性があります。 metavar
にタプルを指定すると、引数ごとに異なる表示が指定されます。
dest
ほとんどの ArgumentParser アクションは、 parse_args()によって返されるオブジェクトの属性として何らかの値を追加します。 この属性の名前は、 add_argument()のdest
キーワード引数によって決定されます。 位置引数アクションの場合、dest
は通常、 add_argument()の最初の引数として提供されます。
オプションの引数アクションの場合、dest
の値は通常、オプション文字列から推測されます。 ArgumentParser は、最初の長いオプション文字列を取得し、最初の--
文字列を削除することにより、dest
の値を生成します。 長いオプション文字列が指定されていない場合、dest
は、最初の-
文字を削除することにより、最初の短いオプション文字列から派生します。 内部の-
文字はすべて_
文字に変換され、文字列が有効な属性名であることを確認します。 以下の例は、この動作を示しています。
dest
を使用すると、カスタム属性名を指定できます。
アクションクラス
アクションクラスは、コマンドラインから引数を処理するcallableを返すcallableであるActionAPIを実装します。 このAPIに続くオブジェクトは、action
パラメーターとしてadd_argument()
に渡すことができます。
- class argparse.Action(option_strings, dest, nargs=None, const=None, default=None, type=None, choices=None, required=False, help=None, metavar=None)
アクションオブジェクトは、コマンドラインの1つ以上の文字列から単一の引数を解析するために必要な情報を表すためにArgumentParserによって使用されます。 Actionクラスは、action
自体を除いて、2つの位置引数と ArgumentParser.add_argument()に渡されるキーワード引数を受け入れる必要があります。
アクションのインスタンス(またはaction
パラメーターへの呼び出し可能な戻り値)には、属性「dest」、「option_strings」、「default」、「type」、「required」、「help」などが必要です。 定義されています。 これらの属性が定義されていることを確認する最も簡単な方法は、Action.__init__
を呼び出すことです。
アクションインスタンスは呼び出し可能である必要があるため、サブクラスは__call__
メソッドをオーバーライドする必要があります。このメソッドは、次の4つのパラメーターを受け入れる必要があります。
parser
-このアクションを含むArgumentParserオブジェクト。namespace
- parse_args()によって返される Namespace オブジェクト。 ほとんどのアクションは、 setattr()を使用してこのオブジェクトに属性を追加します。values
-関連するコマンドライン引数。型変換が適用されています。 型変換は、 add_argument()への type キーワード引数で指定されます。option_string
-このアクションを呼び出すために使用されたオプション文字列。option_string
引数はオプションであり、アクションが位置引数に関連付けられている場合は存在しません。
__call__
メソッドは任意のアクションを実行できますが、通常はdest
およびvalues
に基づいてnamespace
に属性を設定します。
アクションサブクラスは、引数を取らず、プログラムの使用法を出力するときに使用される文字列を返すformat_usage
メソッドを定義できます。 このような方法が提供されていない場合は、適切なデフォルトが使用されます。
parse_args()メソッド
- ArgumentParser.parse_args(args=None, namespace=None)
引数文字列をオブジェクトに変換し、名前空間の属性として割り当てます。 入力された名前空間を返します。
add_argument()への以前の呼び出しは、作成されるオブジェクトとそれらがどのように割り当てられるかを正確に決定します。 詳細については、 add_argument()のドキュメントを参照してください。
オプション値の構文
parse_args()メソッドは、オプションの値を指定するいくつかの方法をサポートしています(オプションが必要な場合)。 最も単純なケースでは、オプションとその値は2つの別々の引数として渡されます。
長いオプション(名前が1文字より長いオプション)の場合、オプションと値は、=
を使用してそれらを区切ることにより、単一のコマンドライン引数として渡すこともできます。
短いオプション(1文字の長さのオプションのみ)の場合、オプションとその値を連結できます。
最後のオプションのみ(またはそれらのいずれも)が値を必要としない限り、単一の-
プレフィックスのみを使用して、いくつかの短いオプションを結合できます。
無効な引数
コマンドラインの解析中に、 parse_args()は、あいまいなオプション、無効なタイプ、無効なオプション、間違った数の位置引数など、さまざまなエラーをチェックします。 このようなエラーが発生すると、終了し、使用法メッセージとともにエラーが出力されます。
-を含む引数
parse_args()メソッドは、ユーザーが明らかに間違いを犯したときはいつでもエラーを出そうとしますが、状況によっては本質的にあいまいなものもあります。 たとえば、コマンドライン引数-1
は、オプションを指定する試み、または位置引数を提供する試みのいずれかである可能性があります。 parse_args()メソッドはここでは注意が必要です。位置引数は、負の数のように見え、パーサーに負の数のように見えるオプションがない場合にのみ、-
で始めることができます。
-
で始まる必要があり、負の数のように見えない位置引数がある場合は、 parse_args()にすべてを通知する疑似引数'--'
を挿入できます。その後は位置引数です:
引数の省略形(プレフィックス一致)
parse_args()メソッドデフォルトでは、省略形が明確な場合(プレフィックスが一意のオプションと一致する場合)、長いオプションをプレフィックスに短縮できます。
複数のオプションを生成する可能性のある引数に対してエラーが生成されます。 この機能は、 allow_abbrev をFalse
に設定することで無効にできます。
sys.argvを超えて
sys.argv の引数以外の引数をArgumentParserで解析すると便利な場合があります。 これは、文字列のリストを parse_args()に渡すことで実現できます。 これは、インタラクティブプロンプトでのテストに役立ちます。
名前空間オブジェクト
- class argparse.Namespace
- parse_args()がデフォルトで使用する単純なクラスで、属性を保持するオブジェクトを作成して返します。
このクラスは意図的に単純で、読み取り可能な文字列表現を持つ object サブクラスにすぎません。 属性をdictのように表示したい場合は、標準のPythonイディオム vars()を使用できます。
また、新しい名前空間オブジェクトではなく、 ArgumentParser に既存のオブジェクトに属性を割り当てさせると便利な場合があります。 これは、namespace=
キーワード引数を指定することで実現できます。
その他のユーティリティ
サブコマンド
- ArgumentParser.add_subparsers([title][, description][, prog][, parser_class][, action][, option_string][, dest][, required][, help][, metavar])
多くのプログラムは、機能をいくつかのサブコマンドに分割します。たとえば、
svn
プログラムは、svn checkout
、svn update
、 [などのサブコマンドを呼び出すことができます。 X168X]。 プログラムがさまざまな種類のコマンドライン引数を必要とするいくつかの異なる機能を実行する場合、この方法で機能を分割することは特に良い考えです。 ArgumentParser は、 add_subparsers()メソッドを使用したこのようなサブコマンドの作成をサポートします。 add_subparsers()メソッドは通常、引数なしで呼び出され、特別なアクションオブジェクトを返します。 このオブジェクトには、コマンド名と ArgumentParser コンストラクター引数を受け取り、通常どおり変更できる ArgumentParser オブジェクトを返す単一のメソッドadd_parser()
があります。パラメータの説明:
title-ヘルプ出力のサブパーサーグループのタイトル。 説明が提供されている場合はデフォルトで「サブコマンド」、それ以外の場合は位置引数にタイトルを使用します
description-ヘルプ出力のサブパーサーグループの説明。デフォルトでは
None
prog-サブコマンドヘルプで表示される使用法情報。デフォルトでは、プログラムの名前とサブパーサー引数の前の位置引数。
parser_class-サブパーサーインスタンスを作成するために使用されるクラス。デフォルトでは、現在のパーサーのクラス(例: ArgumentParser)
action -この引数がコマンドラインで検出されたときに実行される基本的なアクションのタイプ
dest -サブコマンド名が保存される属性の名前。 デフォルトでは
None
であり、値は保存されませんrequired -サブコマンドを指定する必要があるかどうか、デフォルトでは
False
(3.7で追加)help -ヘルプ出力のサブパーサーグループのヘルプ。デフォルトでは
None
metavar -ヘルプで使用可能なサブコマンドを示す文字列。 デフォルトでは
None
であり、サブコマンドを{cmd1、cmd2、..}の形式で表示します。
使用例:
parse_args()によって返されるオブジェクトには、コマンドラインで選択されたメインパーサーとサブパーサーの属性のみが含まれることに注意してください(他のサブパーサーは含まれません)。 したがって、上記の例では、
a
コマンドが指定されている場合、foo
およびbar
属性のみが存在し、b
コマンドが指定されている場合、foo
およびbaz
属性のみが存在します。同様に、サブパーサーからヘルプメッセージが要求されると、その特定のパーサーのヘルプのみが出力されます。 ヘルプメッセージには、親パーサーまたは兄弟パーサーメッセージは含まれません。 (ただし、各サブパーサーコマンドのヘルプメッセージは、上記のように
help=
引数をadd_parser()
に指定することで表示できます。)add_subparsers()メソッドは、
title
およびdescription
キーワード引数もサポートします。 いずれかが存在する場合、サブパーサーのコマンドはヘルプ出力の独自のグループに表示されます。 例えば:さらに、
add_parser
は、追加のaliases
引数をサポートします。これにより、複数の文字列が同じサブパーサーを参照できるようになります。 この例は、svn
のように、checkout
の省略形としてco
をエイリアスします。サブコマンドを処理する特に効果的な方法の1つは、 add_subparsers()メソッドの使用と set_defaults()の呼び出しを組み合わせて、各サブパーサーが実行するPython関数を認識できるようにすることです。 例えば:
このようにして、引数の解析が完了した後、 parse_args()に適切な関数を呼び出すジョブを実行させることができます。 関数をこのようなアクションに関連付けることは、通常、サブパーサーごとに異なるアクションを処理する最も簡単な方法です。 ただし、呼び出されたサブパーサーの名前を確認する必要がある場合は、 add_subparsers()呼び出しの
dest
キーワード引数が機能します。バージョン3.7で変更:新しい必須キーワード引数。
FileTypeオブジェクト
- class argparse.FileType(mode='r', bufsize=- 1, encoding=None, errors=None)
FileType ファクトリは、 ArgumentParser.add_argument()のtype引数に渡すことができるオブジェクトを作成します。 タイプとして FileType オブジェクトを持つ引数は、要求されたモード、バッファサイズ、エンコーディング、およびエラー処理を備えたファイルとしてコマンドライン引数を開きます(詳細については、 open()関数を参照してください)。 )::
FileTypeオブジェクトは、疑似引数
'-'
を理解し、これを読み取り可能な FileType オブジェクトの場合はsys.stdin
に、書き込み可能な FileType の場合はsys.stdout
に自動的に変換します。オブジェクト:バージョン3.4の新機能: エンコーディングおよびエラーキーワード引数。
引数グループ
- ArgumentParser.add_argument_group(title=None, description=None)
デフォルトでは、 ArgumentParser は、ヘルプメッセージを表示するときに、コマンドライン引数を「位置引数」と「オプション引数」にグループ化します。 このデフォルトの引数よりも優れた概念的な引数のグループ化がある場合、 add_argument_group()メソッドを使用して適切なグループを作成できます。
add_argument_group()メソッドは、通常の ArgumentParser と同じように add_argument()メソッドを持つ引数グループオブジェクトを返します。 引数がグループに追加されると、パーサーはそれを通常の引数と同じように扱いますが、ヘルプメッセージ用に別のグループに引数を表示します。 add_argument_group()メソッドは、この表示をカスタマイズするために使用できる title および description 引数を受け入れます。
ユーザー定義グループにない引数は、通常の「位置引数」セクションと「オプション引数」セクションに戻ることに注意してください。
相互排除
- ArgumentParser.add_mutually_exclusive_group(required=False)
相互に排他的なグループを作成します。 argparse は、相互に排他的なグループの引数の1つだけがコマンドラインに存在することを確認します。
add_mutually_exclusive_group()メソッドは、 required 引数も受け入れ、相互に排他的な引数の少なくとも1つが必要であることを示します。
現在、相互に排他的な引数グループは、 add_argument_group()の title および description 引数をサポートしていないことに注意してください。
パーサーのデフォルト
- ArgumentParser.set_defaults(**kwargs)
ほとんどの場合、 parse_args()によって返されるオブジェクトの属性は、コマンドライン引数と引数アクションを調べることによって完全に決定されます。 set_defaults()を使用すると、コマンドラインを検査せずに決定されたいくつかの追加属性を追加できます。
パーサーレベルのデフォルトは常に引数レベルのデフォルトをオーバーライドすることに注意してください。
パーサーレベルのデフォルトは、複数のパーサーを操作するときに特に役立ちます。 このタイプの例については、 add_subparsers()メソッドを参照してください。
- ArgumentParser.get_default(dest)
add_argument()または set_defaults()のいずれかによって設定された、名前空間属性のデフォルト値を取得します。
印刷ヘルプ
最も一般的なアプリケーションでは、 parse_args()が使用法やエラーメッセージのフォーマットと印刷を処理します。 ただし、いくつかのフォーマット方法を使用できます。
- ArgumentParser.print_usage(file=None)
- ArgumentParser をコマンドラインで呼び出す方法の簡単な説明を出力します。 ファイルが
None
の場合、 sys.stdout が想定されます。
- ArgumentParser.print_help(file=None)
- プログラムの使用法と ArgumentParser に登録されている引数に関する情報を含むヘルプメッセージを出力します。 ファイルが
None
の場合、 sys.stdout が想定されます。
文字列を出力する代わりに単に文字列を返すこれらのメソッドのバリエーションもあります。
- ArgumentParser.format_usage()
- コマンドラインで ArgumentParser を呼び出す方法の簡単な説明を含む文字列を返します。
- ArgumentParser.format_help()
- プログラムの使用法や ArgumentParser に登録されている引数に関する情報を含むヘルプメッセージを含む文字列を返します。
部分的な解析
- ArgumentParser.parse_known_args(args=None, namespace=None)
スクリプトがコマンドライン引数の一部のみを解析し、残りの引数を別のスクリプトまたはプログラムに渡す場合があります。 このような場合、 parse_known_args()メソッドが役立ちます。 parse_args()とほとんど同じように機能しますが、追加の引数が存在する場合にエラーが発生しない点が異なります。 代わりに、入力された名前空間と残りの引数文字列のリストを含む2項目のタプルを返します。
警告
プレフィックス一致ルールがparse_known_args()
に適用されます。 パーサーは、既知のオプションの1つのプレフィックスである場合でも、残りの引数リストに残すのではなく、オプションを消費する場合があります。
ファイル解析のカスタマイズ
- ArgumentParser.convert_arg_line_to_args(arg_line)
ファイルから読み取られる引数( fromfile_prefix_chars キーワード引数から ArgumentParser コンストラクターを参照)は、1行に1つの引数が読み取られます。 convert_arg_line_to_args()は、読みやすくするためにオーバーライドできます。
このメソッドは、引数ファイルから読み取られた文字列である単一の引数 arg_line を取ります。 この文字列から解析された引数のリストを返します。 このメソッドは、引数ファイルから読み取られた行ごとに1回ずつ呼び出されます。
このメソッドの便利なオーバーライドは、スペースで区切られた各単語を引数として扱うメソッドです。 次の例は、これを行う方法を示しています。
終了メソッド
- ArgumentParser.exit(status=0, message=None)
このメソッドはプログラムを終了し、指定された status で終了し、指定されている場合は、その前にメッセージを出力します。 ユーザーは、このメソッドをオーバーライドして、これらの手順を異なる方法で処理できます。
- ArgumentParser.error(message)
- このメソッドは、メッセージを含む使用法メッセージを標準エラーに出力し、ステータスコード2でプログラムを終了します。
混合構文解析
- ArgumentParser.parse_intermixed_args(args=None, namespace=None)
- ArgumentParser.parse_known_intermixed_args(args=None, namespace=None)
多くのUnixコマンドを使用すると、ユーザーはオプションの引数と位置引数を混在させることができます。 parse_intermixed_args()および parse_known_intermixed_args()メソッドは、この解析スタイルをサポートしています。
これらのパーサーはすべてのargparse機能をサポートしているわけではなく、サポートされていない機能が使用されている場合は例外が発生します。 特に、サブパーサー、argparse.REMAINDER
、およびオプションと定位置の両方を含む相互に排他的なグループはサポートされていません。
次の例は、 parse_known_args()と parse_intermixed_args()の違いを示しています。前者は['2', '3']
を未解析の引数として返し、後者はすべての位置をrest
。
parse_known_intermixed_args()は、入力された名前空間と残りの引数文字列のリストを含む2項目のタプルを返します。 parse_intermixed_args()は、解析されていない引数文字列が残っている場合にエラーを発生させます。
バージョン3.7の新機能。
optparseコードのアップグレード
元々、 argparse モジュールは、 optparse との互換性を維持しようとしていました。 ただし、 optparse を透過的に拡張することは困難でした。特に、新しいnargs=
指定子とより適切な使用法メッセージをサポートするために必要な変更がありました。 optparse のほとんどすべてがコピー貼り付けまたはモンキーパッチのいずれかであった場合、下位互換性を維持しようとすることはもはや実用的ではないように思われました。
argparse モジュールは、標準ライブラリ optparse モジュールを、次のような多くの点で改善しています。
- 位置引数の処理。
- サブコマンドのサポート。
+
や/
などの代替オプションプレフィックスを許可します。- ゼロ以上および1つ以上のスタイル引数の処理。
- より有益な使用法メッセージを作成します。
- カスタム
type
およびaction
にはるかにシンプルなインターフェイスを提供します。
optparse から argparse への部分的なアップグレードパス:
- すべての optparse.OptionParser.add_option()呼び出しを ArgumentParser.add_argument()呼び出しに置き換えます。
(options, args) = parser.parse_args()
をargs = parser.parse_args()
に置き換え、位置引数の ArgumentParser.add_argument()呼び出しを追加します。 以前はoptions
と呼ばれていましたが、現在は argparse コンテキストではargs
と呼ばれていることに注意してください。- parse_args()の代わりに parse_intermixed_args()を使用して、 optparse.OptionParser.disable_interspersed_args()を置き換えます。
- コールバックアクションと
callback_*
キーワード引数をtype
またはaction
引数に置き換えます。 type
キーワード引数の文字列名を、対応するタイプオブジェクトに置き換えます(例: int、float、complexなど)。optparse.Values
を名前空間およびoptparse.OptionError
に、optparse.OptionValueError
をArgumentError
に置き換えます。- 文字列を
%default
や%prog
などの暗黙の引数で標準のPython構文に置き換えて、辞書を使用して文字列をフォーマットします。つまり、%(default)s
と%(prog)s
です。 - OptionParserコンストラクター
version
引数をparser.add_argument('--version', action='version', version='<the version>')
の呼び出しに置き換えます。