プログラムのヘルプを見たことはありますでしょうか。
-hや–helpオプションを指定して、プログラムの使い方を出力されるメッセージのことを指します。
自分で作成する必要があるのですが、プログラム本体ではないですし、あまり時間を割きたくないところだと思います。
Pythonではargparseパッケージによってプログラムヘルプを簡単に作成することができます。
argparseパッケージのAPIリファレンスはこちら。
基本的な使い方
プログラムオプションとして、例えば、-vを指定することで、バージョン情報を出力させたい場合は、
以下のようにコーディングします。
ここではファイル名をargparse_test.pyとしています。
import argparse
def get_option():
argparser = argparse.ArgumentParser('argparsev_test.py')
argparser.add_argument('-v', '--version', action='version', version='argparsev_test.pyのバージョンは1.0です')
args = argparser.parse_args()
return args
if __name__ == '__main__':
args = get_option()
print('argparseパッケージテスト')
実行結果
実際にプログラムを実行すると以下の結果が出力されます。
$ python argparse_test.py
argparseパッケージテスト
今度はプログラム実行時に、-hまたは–helpオプションを追加して実行してみましょう。
以下の実行結果のように、プログラムヘルプを出力してくれます。
このプログラムヘルプでは、-vまたは–versionオプションを指定することで、
バージョン情報を出力できることを教えてくれます。
$ python argparse_test.py -h
usage: argparsev_test.py [-h] [-v]
options:
-h, --help show this help message and exit
-v, --version show program's version number and exit
実際に-vまたは–versionをオプションに指定して実行すると、
-vオプションのヘルプメッセージ(add_argument関数で指定した文字列)を出力することができます。
$ python argparse_test.py -v
argparsev_test.pyのバージョンは1.0です
意図しないオプションを指定した場合は、以下のようなエラーが出力されます。
$ python argparse_test.py -a
usage: argparsev_test.py [-h] [-v]
argparsev_test: error: unrecognized arguments: -a
便利な使い方
argparseパッケージの便利な使い方を紹介します。
オプションによるフラグ設定
特定のオプションが指定されているかの確認に利用できます。
例えば、-Dオプションが指定されている場合に、特定の処理を実行させるなどが挙げられます。
add_argument関数でaction=’store_true’を指定することで、オプションフラグを設定できます。
参照時は、args.directoryといったオプション指定した文字列変数に、True or Falseがセットされます。
import argparse
def get_option():
argparser = argparse.ArgumentParser('argparsev_test.py')
argparser.add_argument('-v', '--version', action='version', version='argparsev_test.pyのバージョンは1.0です')
argparser.add_argument('-D', '--directory', action='store_true', help='-Dオプションのヘルプメッセージ')
args = argparser.parse_args()
return args
if __name__ == '__main__':
args = get_option()
if args.directory == True:
print('-Dオプション有効化')
else:
print('-Dオプション無効化')
print('argparseパッケージテスト')
-Dオプションを追加した場合と追加しなかった場合で、以下ような実行結果になります。
$ python argparse_test.py
-Dオプション無効化
argparseパッケージテスト
$ python argparse_test.py -D
-Dオプション有効化
argparseパッケージテスト
データ型の指定
引数のデータ型を指定して、意図していないデータ型の場合にはエラーを発生させるといったことも可能です。
add_argument関数でtype=strまたはtype=intなどを指定することができます。
また、ユーザ関数を指定することもできますので、複雑な文字列パターンにも対応可能です。
import argparse
import datetime
def get_option():
def check_datetime_format(string):
(datestr, timestr) = string.split('T')
(yyyy, mm, dd) = datestr.split('-')
(hh24, mi, ss) = timestr.split(':')
return datetime.datetime(int(yyyy), int(mm), int(dd), int(hh24), int(mi), int(ss))
argparser = argparse.ArgumentParser('argparsev_test.py')
argparser.add_argument('-v', '--version', action='version', version='argparsev_test.pyのバージョンは1.0です')
argparser.add_argument('-s1', '--s1', type=int, help='-s1オプションのヘルプメッセージ')
argparser.add_argument('-s2', '--s2', type=check_datetime_format, help='-s2オプションのヘルプメッセージ')
args = argparser.parse_args()
return args
if __name__ == '__main__':
args = get_option()
print('argparseパッケージテスト')
実行結果は以下の通りです。
$ python argparse_test.py -s1 99
argparseパッケージテスト ★s1に整数データを渡しているので正常終了
$ python argparse_test.py -s1 foo
usage: argparsev_test.py [-h] [-v] [-s1 S1] [-s2 S2]
argparsev_test.py: error: argument -s1/--s1: invalid int value: 'foo' ★s1に文字列データを渡しているのでエラー
$ python argparse_test.py -s2 2024-12-15T10:00:00
argparseパッケージテスト ★s2に意図したパターンの値を渡しているので正常終了
$ python argparse_test.py -s2 2024-12-15T10:00:00aaa ★s2に意図しないパターンの値を渡しているのでエラー
usage: argparsev_test.py [-h] [-v] [-s1 S1] [-s2 S2]
argparsev_test.py: error: argument -s2/--s2: invalid check_datetime_format value: '2024-12-15T10:00:00aaa'
まとめ
argparseパッケージを駆使することで、もっと細かい制御が可能です。
まずは基本的な使い方を抑えていただいて、プログラムヘルプを作ってみてください。
コメント