Pythonのコマンドライン引数の説明の表示を追加する(argparse編)
Pythonのargparseモジュールでコマンドライン引数を読み取るスクリプトの、ヘルプで表示されるコメントを増やしてみました。
目次
argparseモジュールとは
argparseモジュールは、Pythonのスクリプトのコマンドライン引数を設定する便利モジュールです。使い方は 以前の投稿 を参照してください。
スクリプトのヘルプの表示
argparseモジュールを使うと、-hまたは--helpをコマンドラインに指定することでそのスクリプトのヘルプが表示されます。
このヘルプの表示にいろいろ追加してみます。
まず、パーサーオブジェクトを作るArgumentParserオブジェクトのコンストラクター引数にいろいろと指定できます。
parser = argparse.ArgumentParser([prog], [usage], [description], [epilog], [parents], [formatter_class], [prefix_chars], [fromfile_prefix_chars], [argument_default], [conflict_handler], [add_help], [allow_abbrev])
変数 |
型 |
内容 |
---|---|---|
prog |
str |
省略可。既定値はNone。ヘルプに表示するプログラム名。Noneのときはsys.argv[0]。 |
usage |
str |
省略可。既定値はNone。ヘルプに表示する使用方法。 |
description |
str |
省略可。既定値はNone。ヘルプに表示するスクリプトの動作内容の説明。 |
epilog |
str |
省略可。既定値はNone。ヘルプの引数の説明の後に表示される説明。 |
parents |
list |
省略可。既定値は空のリスト。他のパーサーとの共通の引数の情報。 |
formatter_class |
argparse |
省略可。既定値はargparse.HelpFormatter。ヘルプのフォーマット。 |
prefix_chars |
str |
省略可。既定値は'-'。オプショナル引数の接頭辞。 |
fromfile_prefix_chars |
str |
省略可。既定値はNone。引数を外部ファイルに保存して利用するときの、ファイルの指定文字。 |
argument_default |
list |
省略可。既定値はNone。パーサー全体に適用する引数の既定値。 |
conflict_handler |
str |
省略可。既定値は'error'。同じ引数名を使って引数を作ろうとしたときの動作の指定。 |
add_help |
bool |
省略可。既定値はTrue。ヘルプを追加するかどうか。 |
allow_abbrev |
bool |
省略可。既定値はTrue。長い引き数名を短縮して入力できるようにするかどうか。 |
parser |
ArgumentParser |
パーサーオブジェクト。 |
ヘルプを設定する項目がいろいろありますね。
パーサーオブジェクトに引数を登録するときに使うadd_argumentメソッドにも、ヘルプを設定する項目があります。
ArgumentParser.add_argument(name, [action], [nargs], [const], [default], [type], [choices], [required], [help], [metavar], [dest])
変数 |
型 |
内容 |
---|---|---|
name |
str,list |
引数の名前、またはそのリスト。 |
action |
str |
省略可。既定値はstore。引数が存在したときのアクション。 |
nargs |
int,str |
省略可。受け取るべき引数の数。 |
const |
省略可。既定値はNone。actionとnargsに利用される定数。 |
|
default |
省略可。既定値はNone。引数が指定されなかったときの既定値。 |
|
type |
省略可。引数を変換する型。 |
|
choices |
省略可。引数として許容できる範囲。 |
|
required |
bool |
省略可。既定値はFalse。引数を省略可能かどうか。 |
help |
str |
省略可。引数の説明。 |
metavar |
str |
省略可。既定値は、位置引数の場合は名前。オプショナル引数の場合は名前を大文字に変換したもの。ヘルプで表示される引数の名前。 |
dest |
str |
省略可。既定値はnameから接頭辞を削除したもの。パースしたときのプロパティ名。 |
ArgumentParserコンストラクターのprog、usage、description、epilogとadd_argumentメソッドのhelpに、ヘルプに追加する文言を指定すればよさそうです。
ヘルプの設定例
試してみましょう。まず素の状態です。
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--hoge')
parser.add_argument('--piyo')
parser.add_argument('fuwa')
parser.add_argument('saku')
args = parser.parse_args()
print('引数 hoge : ', args.hoge)
print('引数 piyo : ', args.piyo)
print('引数 fuwa : ', args.fuwa)
print('引数 saku : ', args.saku)
>python argtry.py
usage: argtry.py [-h] [--hoge HOGE] [--piyo PIYO] fuwa saku
argtry.py: error: the following arguments are required: fuwa, saku
>python argtry.py --help
usage: argtry.py [-h] [--hoge HOGE] [--piyo PIYO] fuwa saku
positional arguments:
fuwa
saku
optional arguments:
-h, --help show this help message and exit
--hoge HOGE
--piyo PIYO
スクリプト名と引数名から何を入力すれば良いかわかるのであれば、このままでも良さそうです。
では、いろいろ指定してみます。
まず、ArgmentParserコンストラクターの引数を指定してみましょう。
import argparse
parser = argparse.ArgumentParser(prog='PROG', usage='USAGE', description='DESCRIPTION', epilog='EPILOG')
parser.add_argument('--hoge')
parser.add_argument('--piyo')
parser.add_argument('fuwa')
parser.add_argument('saku')
args = parser.parse_args()
print('引数 hoge : ', args.hoge)
print('引数 piyo : ', args.piyo)
print('引数 fuwa : ', args.fuwa)
print('引数 saku : ', args.saku)
>python argtry.py
usage: USAGE
PROG: error: the following arguments are required: fuwa, saku
>python argtry.py --help
usage: USAGE
DESCRIPTION
positional arguments:
fuwa
saku
optional arguments:
-h, --help show this help message and exit
--hoge HOGE
--piyo PIYO
EPILOG
usageを指定することで、コマンドライン引数の使い方の説明が上書きされてしまいました。これは善し悪しですね。
usageを指定しないとこういう出力になります。
>python argtry.py
usage: PROG [-h] [--hoge HOGE] [--piyo PIYO] fuwa saku
PROG: error: the following arguments are required: fuwa, saku
>python argtry.py --help
usage: PROG [-h] [--hoge HOGE] [--piyo PIYO] fuwa saku
DESCRIPTION
positional arguments:
fuwa
saku
optional arguments:
-h, --help show this help message and exit
--hoge HOGE
--piyo PIYO
EPILOG
usageのところのスクリプト名がPROGに置き換わり、usageと引数の説明の間にDESCRIPTIONが入り、引数の説明に続けてEPILOGが書かれています。それぞれ、用途に合わせて説明用の文字列を設定すれば良いのですね。
では、add_argumentメソッドにいろいろ指定してみます。
import argparse
parser = argparse.ArgumentParser(prog='PROG', description='DESCRIPTION', epilog='EPILOG')
parser.add_argument('--hoge', help='ほげ')
parser.add_argument('--piyo', metavar='ぴよ')
parser.add_argument('fuwa', help='ふわ')
parser.add_argument('saku', metavar='さく')
args = parser.parse_args()
print('引数 hoge : ', args.hoge)
print('引数 piyo : ', args.piyo)
print('引数 fuwa : ', args.fuwa)
print('引数 saku : ', args.saku)
>python argtry.py
usage: PROG [-h] [--hoge HOGE] [--piyo ぴよ] fuwa さく
PROG: error: the following arguments are required: fuwa, さく
>python argtry.py --help
usage: PROG [-h] [--hoge HOGE] [--piyo ぴよ] fuwa さく
DESCRIPTION
positional arguments:
fuwa ふわ
さく
optional arguments:
-h, --help show this help message and exit
--hoge HOGE ほげ
--piyo ぴよ
EPILOG
helpに指定した文字列がそれぞれ引数の右側に表示されています。簡潔な説明をここに書けばOKですね。
metavar引数を指定すると表示名が変わるのですが、オプショナル引数のほうは良いとして、位置引数のほうはusageの方までsakuという引数名が「さく」に置き換わってしまっています。これはちょっとまずいですね。位置引数にmetavarを設定するときは要注意です。
公開日
広告