petitviolet blog

    argparseの使い方とoptparseとの違い

    2014-01-16

    QiitaPython

    以前、OptParser の使い方として記事を書いたが、どうやら argparse.ArgumentParser の方がなういらしい

    なので argparse.ArgumentParser の使い方のメモ

    # -*- coding:utf-8 -*-
    from optparse import OptionParser
    from argparse import ArgumentParser
    
    if __name__ == '__main__':
    
        """ コマンドエラー時に表示する文字列 """
        desc = u'{0} [Args] [Options]\nDetailed options -h or --help'.format(__file__)
        # %progは出力できない
        # usage = u'%prog [Args] [Options]\nDetailed options -h or --help'
    
        parser = ArgumentParser(description=desc)
        # _parser = OptionParser(usage=usage, version=1.0)
    
        # 文字列
        parser.add_argument(
            '-q', '--query',
            type = str,         # 受け取る値の型を指定する
            dest = 'query',     # 保存先変数名
            required = True,    # 必須項目
            help = '検索する単語' # --help時に表示する文
        )
        # _parser.add_argument(
        #     '-q', '--query',
        #     action = 'store',
        #     type = 'str',               # 受け取る値の型を指定する
        #     dest = 'download_date',     # 保存先変数名
        #     help = '検索する単語'  # --help時に表示する文
        # )
    
        # 数値
        parser.add_argument(
            '-w', '--worker',
            type = int,
            dest = 'worker',
            default = 1,
            help = 'マルチプロセス数'
        )
        # 真偽値
        parser.add_argument(
            '-b', '--bool',
            action = 'store_true', # store_trueでdestにTrueがはいる(store_falseもある)
            dest = 'bool'
        )
    
        # """ 各オプションのデフォルト値をセット """
        # _parser.set_defaults(worker = 1)
    
        """ オプションをパース """
        args = parser.parse_args()
        # _options, _args = _parser.parse_args()
    
    
        """ オプションで指定した値は args.<変数名>で取得できる """
        query, worker, bool = args.query, args.worker, args.bool
        # query, worker, bool = _options.query, _options.worker, _options.bool
        if worker > 100
            # エラーを発生させるときは↓こんな感じ
            parser.error('プロセスが多すぎます')
    
        print args
    
    

    optparse も argparse もそんなに変わらないと思う 細かな所が変わっているのと、argparse には色々機能が追加されているみたいだが、基本的にはこの程度で十分だと思う

    ###参考 http://docs.python.jp/2/library/argparse.html

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