optparse の基本
Python の非常に便利なモジュールである optparse ですが、
parse_args
で得られる options
があまり使い勝手が良くない
と感じるのです。
# !/usr/bin/env python
# -*- coding:utf-8 -*-
import optparse
parser = optparse.OptionParser()
# option '-i' を追加
parser.add_option('-o', '--output', type='str',
help='output filename')
# コマンドライン引数をパース
options, args = parser.parse_args()
print(type(options))
例に上げるのはただ単に出力ファイル名を -o
もしくは --output
オプションで指定できるようにした OptionParser ですが、
この返り値 options
って辞書でも何でもなく、<type 'instance'>
という型のオブジェクトが返ってくるわけです。
オプションの値にアクセスする場合は options.output
といったように
Attribute にアクセスする形となります。
これ、dict に変更できたら、関数のキーワード引数の位置にそのまま投げれるのにと。
dict 化
というわけでさくっとやってしまいます。
得に難しいことはせず。以下のように一旦文字列にして組み込み関数の eval
で
Python として解釈してしまえば、dict
に変換できてしまいます。
options = eval(str(options))
キーワード引数として
こうなってしまえば、他の関数などにパラメータを渡す場合も楽ですね。
def hogehoge(foo, fuga, **kwargs):
output = kwargs.get('output', sys.stdout)
hogehoge(foo, fuga, **options)
こんな感じでキーワード付き引数のように使えます。
実装しているアルゴリズムに新しくパラメータを追加する必要が
出来たときなど、地味に役にたつ一工夫ですた。