主にターミナルエミュレーターまたはGUIアプリで実行することを目的としたPythonスクリプトまたはアプリケーションを開発した場合、コマンドライン引数を追加すると、その使いやすさ、コードの読みやすさ、アプリケーション構造、およびエンドユーザーにとってのアプリケーションの全体的な使いやすさが向上します。これらのコマンドライン引数はオプションまたはスイッチとも呼ばれ、bashスクリプトやその他のC / C ++ベースのプログラムで通常見られる引数と同様に機能します。
Pythonスクリプトに引数を追加するには、argparseという名前の組み込みモジュールを使用する必要があります。名前が示すように、Pythonスクリプトまたはアプリケーションの起動中に使用されるコマンドライン引数を解析します。これらの解析された引数は、argparseモジュールによってもチェックされ、適切な型であることを確認します。引数に無効な値がある場合、エラーが発生します。
argparseモジュールの使用法は、例を通して最もよく理解できます。以下は、argparseモジュールの使用を開始するためのコードサンプルです。
例1:ヘルプ引数とメッセージを生成する
以下のコードサンプルを検討してください。
輸入argparse
パーサー =argparse。ArgumentParser((説明=「テストプログラム。」)。
args= パーサー。parse_args(()。
最初のステートメントは、argparseモジュールをインポートします。次に、ArgumentParserオブジェクトの新しいインスタンスが作成され、プログラムの簡単な説明が引数として提供されます。 ArgumentParserオブジェクトは、コマンドライン引数値をPythonが理解できるデータ型に変換するために必要です。これは、最後のステートメントに示されているように、ArgumentParserオブジェクトのparse_argsメソッドによって実行されます。
上記のコードサンプルをtest.pyという名前のファイルに保存したとすると、以下のコマンドを実行すると、プログラムに関連するヘルプメッセージが表示されます。
$ ./テスト。py-NS$ ./テスト。py-ヘルプ
次のような出力が得られるはずです。
使用法:test.py [-h]
テストプログラム。
オプションの引数:
-h、-helpこのヘルプメッセージを表示して終了します
上記のコードサンプルには、解析された引数を処理してオブジェクトに変換するロジックが追加されていないことに注意してください。したがって、個々の引数のヘルプメッセージは出力に表示されません。プログラムで解析された引数の値を処理するためのロジックを追加すると、ヘルプメッセージに個々の引数の説明が表示され始めます。
例2:文字列引数を処理する
Pythonスクリプトで受け入れ可能な引数を追加するには、add_argumentメソッドを使用する必要があります。次のコードを見てください。
輸入argparseパーサー =argparse。ArgumentParser((説明=「テストプログラム。」)。
パーサー。add_argument(('print_string'、 ヘルプ='指定された引数を出力します。')。
args= パーサー。parse_args(()。
印刷((引数。print_string)。
add_argumentメソッドの使用を示す新しいステートメントが追加されました。スクリプトの起動時に追加された引数は、ArgumentParserによってprint_stringオブジェクトとして扱われます。
デフォルトでは、add_argumentメソッドは引数から取得した値を文字列として扱うため、この場合はタイプを明示的に指定する必要はありません。オーバーライドされない限り、デフォルト値のNoneも追加された引数に割り当てられます。
もう一度ヘルプメッセージを見てください。
使用法:test.py [-h] [print_string]テストプログラム。
位置引数:
print_string指定された引数を出力します。
オプションの引数:
-h、-helpこのヘルプメッセージを表示して終了します
出力の行の1つは、位置引数を示しています。引数のキーワードが定義されていないため、現在、引数は位置引数として扱われ、指定された引数の順序と位置がプログラムに直接影響します。手動で動作を変更しない限り、位置引数も必須です。
オプションの引数を定義および解析するには、–(二重ダッシュ)を使用し、デフォルトの引数を使用してデフォルト値を変更します。
輸入argparseパーサー =argparse。ArgumentParser((説明=「テストプログラム。」)。
パーサー。add_argument(('--print_string'、 ヘルプ='指定された引数を出力します。'、ディフォルト=にランダム ストリング。)。
args= パーサー。parse_args(()。
印刷((引数。print_string)。
これで、引数なしでtest.pyスクリプトを実行すると、ランダムな文字列が得られるはずです。出力として。オプションで–print_stringキーワードを使用して、任意の文字列を印刷することもできます。
$ ./テスト。py--print_stringLinuxHint。とLinuxHint.com追加のrequired = True引数を使用して、オプションの引数を必須にすることができることに注意してください。
最後に、-(一点鎖線)を使用して引数の短縮バージョンを定義し、冗長性を減らすこともできます。
輸入argparseパーサー =argparse。ArgumentParser((説明=「テストプログラム。」)。
パーサー。add_argument((-NS、 '--print_string'、 ヘルプ='指定された引数を出力します。'、ディフォルト=にランダム ストリング。)。
args= パーサー。parse_args(()。
印刷((引数。print_string)。
次のコマンドを実行すると、上記と同じ結果が得られます。
$ ./テスト。py-pLinuxHint。と例3:整数引数を処理する
整数値を必要とする引数を処理するには、typeキーワードをintに設定して検証を許可し、条件が満たされない場合にエラーをスローする必要があります。
輸入argparseパーサー =argparse。ArgumentParser((説明=「テストプログラム。」)。
パーサー。add_argument(('-NS'、 '--print_string'、 ヘルプ='指定された引数を出力します。'、 タイプ=int)。
args= パーサー。parse_args(()。
印刷((引数。print_string)。
次のコマンドを実行してみてください。
$ ./テスト。py-pLinuxHint。と次のようなエラーが発生するはずです。
使用法:test.py [-h] [-p PRINT_STRING]test.py:エラー:引数-p / -print_string:無効なint値: 'LinuxHint.com'
整数値を指定すると、正しい結果が得られます。
$ ./テスト。py-NS10001000例4:TrueとFalseの切り替えを処理する
action引数を使用して、値を指定せずに引数を渡して、TrueフラグとFalseフラグとして扱うことができます。
輸入argparseパーサー =argparse。ArgumentParser((説明=「テストプログラム。」)。
パーサー。add_argument(('-NS'、 '--print_string'、 ヘルプ='指定された引数を出力します。'、アクション='store_true')。
args= パーサー。parse_args(()。
印刷((引数。print_string)。
以下のコマンドを実行して、出力として単純なTrueを取得します。
$ ./テスト。py-NS-p引数を指定せずにスクリプトを実行すると、代わりにFalse値が割り当てられます。 actionキーワードの値store_trueは、-p引数が明示的に指定されている場合は常に、print_string変数にTrue値を割り当てます。それ以外の場合は、変数にFalseが割り当てられます。
例5:引数値をリストとして扱う
一度に複数の値を取得してリストに保存する場合は、nargsキーワードを次の形式で指定する必要があります。
輸入argparseパーサー =argparse。ArgumentParser((説明=「テストプログラム。」)。
パーサー。add_argument(('-NS'、 '--print_string'、 ヘルプ='指定された引数を出力します。'、nargs='*')。
args= パーサー。parse_args(()。
印刷((引数。print_string)。
次のコマンドを実行して、上記のコードをテストします。
$ ./テスト。py-p a b次のような出力が得られるはずです。
['a'、 'b']結論
argparseモジュールは、コマンドラインアプリケーションの動作を微調整し、ユーザーが指定した値を解析するための多数のオプションを備えた非常に包括的なものです。これらの例は、argparseモジュールの基本的な使用法にのみ触れています。高度で複雑なアプリケーションの場合、異なる実装が必要になる場合があります。訪問 公式ドキュメント モジュールの完全な説明については。