blog.petitviolet.net

OptParserの使い方

2013-09-25

QiitaPython
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from optparse import OptionParser

if __name__ == '__main__':

    """ コマンドエラー時に表示する文字列 """
    usage = u'%prog [Args] [Options]\nDetailed options -h or --help'

    version = 0.1
    parser = OptionParser(usage=usage, version=version)

    """ test.py -d 20111201 のように、オプションの後に整数値を入力させたい場合 """
    parser.add_option(
        '-d', '--date',
        action = 'store',
        type = 'int',               # 受け取る値の型を指定する
        dest = 'download_date',     # 保存先変数名
        help = 'Set date(yyyymmdd) you want to download.(ex.20110811)'  # --help時に表示する文(見れば分かるかw)
    )

    """ 文字列が欲しい場合 (test.py -f hoge.txt) """
    parser.add_option(
        '-f', '--file',
        action = 'store',
        type = 'str',           # 型指定
        dest = 'file_name',     # 保存先変数名
        help = 'Set filename (ex. hoge.txt)'
    )

    """ -s を指定した場合、trueを保存する """
    parser.add_option(
        '-s', '--sleep',
        action = 'store_true',      # store_trueの場合、Trueが'dest'で指定された変数へ格納される。(false時はstore_false)
        dest = 'hoge_flg',
        help = 'set sleep flag'
    )

    """ 各オプションのデフォルト値をセット """
    parser.set_defaults(
        download_date = None,
        file_name = None,
        hoge_flg = False
    )

    """ オプションをパース """
    options, args = parser.parse_args()

    """ 単純な引数(例: test.py a b)はargs[index]で取得できる """
    if len(args) > 0:
        for i, v in enumerate(args):
            print 'Args[%s] is: %s' % (i, v)

    """ オプションで指定した値は options.<変数名>で取得できる """
    date = options.download_date
    if date:
        if len(str(date)) != 8:
            # エラーを発生させるときは↓こんな感じ
            parser.error('Date must be yyyymmdd')

    print 'date: %s, file: %s, sleep: %s' % (options.download_date, options.file_name, options.hoge_flg)

このファイルを –help オプションをつけて実行すると

$ python test.py --help

Usage: test.py [Args] [Options]
Detailed options -h or --help

Options:
  --version             show program's version number and exit
  -h, --help            show this help message and exit
  -d DOWNLOAD_DATE, --date=DOWNLOAD_DATE
                        Set date(yyyymmdd) you want to download.(ex.20110811)
  -f FILE_NAME, --file=FILE_NAME
                        Set filename (ex. hoge.txt)
  -s, --sleep           set sleep flag

from: https://qiita.com/petitviolet/items/c2ba174a153bbdc5ad22