コマンドライン引数を解析するときはOptionParserが便利。
(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}
[]