(19/9/6 追記)
vars()を利用すると、もっとスッキリ記述できるとアドバイスいただきました。詳細はコメントを見てください。
Pythonを実行するときにコマンドラインオプションを使っていろいろしたい時はargparseを使っている。しかし、argparseで生成されたオブジェクトに入っている値を確認する用のオレオレprint文を毎回作成するのは面倒である。
そこで、自動でargparseの中身を取得して表示するargsPrint
を作成した。parse_args()で生成したオブジェクトをとりあえずargsPrint
に突っ込むだけで勝手に表示してくれる。
(追記)使用例としては、argsPrint
をfunc.pyなど適当なファイルに記述し、使用したいプログラム(main.pyなど)と同じ階層に置いたりして使用する。
動作環境
- Ubuntu 16.04
- Python 3.5.2
実装例
func.py
def argsPrint(p, bar=30):
"""
argparseの parse_args() で生成されたオブジェクトを入力すると、
integersとaccumulateを自動で取得して表示する
[in] p: parse_args()で生成されたオブジェクト
[in] bar: 区切りのハイフンの数
"""
print('-' * bar)
args = [(i, getattr(p, i)) for i in dir(p) if not '_' in i[0]]
for i, j in args:
if isinstance(j, list):
print('{0}[{1}]:'.format(i, len(j)))
[print('\t{}'.format(k)) for k in j]
else:
print('{0}:\t{1}'.format(i, j))
print('-' * bar)
例えばargparseを以下のように設定してargsPrint
を使用してみる。
main.py
help = '画像を読み込んでデータセットを作成する'
import argparse
from func import argsPrint
def command():
parser = argparse.ArgumentParser(description=help)
parser.add_argument('jpeg', nargs='+',
help='使用する画像のパス')
parser.add_argument('--img_size', '-s', type=int, default=32,
help='生成される画像サイズ(default: 32 pixel)')
parser.add_argument('--train_per_all', '-t', type=float, default=0.85,
help='画像数に対する学習用画像の割合(default: 0.85)')
return parser.parse_args()
if __name__ == '__main__':
args = command()
argsPrint(args)
使用例
$ ./main.py FontData/font_0[0-2]*
------------------------------
img_size: 32
jpeg[3]:
FontData/font_00.bmp
FontData/font_01.bmp
FontData/font_02.bmp
train_per_all: 0.85
------------------------------
以上。