Python

Pythonのargparseの中身を自動で取得して可視化する

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
------------------------------

以上。