(2016/4/29追記) zfhrp7さんがコメントにてご指摘くださったように、OptionParserはpending deprecationとなっています。同様の機能を提供するargparseを使うようにしてください。
サンプル
from optparse import OptionParser def main(): parser = OptionParser() parser.add_option("-n", "--n_jobs", dest="n_jobs", action="store", type="int", default=1, metavar="N", help="run N jobs in parallel") parser.add_option("-v", "--verbose", dest="verbose", action="store_true", default=False, help="if true, output verbose messsages") (options, args) = parser.parse_args() print (options) print (args) if __name__ == '__main__': main()
説明
上のサンプルのように、オプションと次の値のセットで指定するコマンド引数も、オプション単体で指定するコマンド引数も、正しく解析することができる。
add_optionの引数の説明を下表にまとめる。
引数 | 説明 |
第一引数 | コマンドラインから渡されるオプション名 |
第二引数 | コマンドラインから渡されるオプション名(第一引数とは別の表記) |
dest | 解析後に、optionsのどのキーに設定するか |
action | オプションが与えられたとき何をするか 次の引数を設定値として格納する、フラグをtrueにする、フラグをfalseにするなど |
type | オプションの次の引数が満たすべき型 |
default | オプションが指定されなかったときのデフォルト値 |
metavar | ヘルプの文言中に使うメタ値 |
help | ヘルプに表示する文言 |
実行結果
実行サンプルをいくつか。
まず、ヘルプの表示。
kenjih$ python main.py -h Usage: main.py [options] Options: -h, --help show this help message and exit -n N, --n_jobs=N run N jobs in parallel -v, --verbose if true, output verbose messsages
次にオプションを指定した場合。parserに解析されなかったコマンド引数はargsに格納されることに注意。
kenjih$ python main.py -n 5 -v arg1 arg2 {'n_jobs': 5, 'verbose': True} ['arg1', 'arg2']
最後にオプション指定なしの場合。
kenjih$ python main.py {'n_jobs': 1, 'verbose': False} []
一応念のためですが、optparseは廃止日未定ながらpending deprecaitonでargparseを使ってくださいということになっています (PEP389)
返信削除その他ではClick,docopt(,argparse)が紹介されていました
https://realpython.com/blog/python/comparing-python-command-line-parsing-libraries-argparse-docopt-click/
zfhrp7さん、コメントありがとうございます。
削除pending deprecationになっていたのですね。本文に注釈を追記しておきます。