2011年12月31日土曜日

[python] 今年最後の大修整!colorizeのオプションを大幅変更!

まぁ、やったことは別に大したことではないけども。
以前作った標準出力に色を付けるコマンド colorizeの、オプション回りを修正した。
前の記事
結構派手に変えた。前のオプションは全削除。

ソースはここ。
kokukuma / python-colorize

colorizeの使い方


一番簡単な使い方はこれ。
$ colorize.py karino

任意に色を指定するために4つのオプションを持っている。
簡単な色と範囲の指定には「-c」、「-r」オプションを使用する。
cは色の指定。rは正規表現を使った範囲の指定。
使い方は、たとえばこんな感じ。
$ colorize.py -c green -r '^.*$' karino
$ colorize.py -c blue -r 'kari' karino


もっと複雑なルールを設定するために、
設定ファイルを書くことができる。
デフォルトのパスは、~/.colorize.yml
形式は見ればわかる。

たとえばこんな感じ。
$ colorize.py -s errorlog [error]

たとえばこんな感じ。
$ ping google.com | colorize.py -s ping

どんな出力になるかは、試してみてのお楽しみ。


また、デフォルトパス以外の設定ファイルを読み込むこともできる。
たとえばこんな感じ。
$ colorize.py -f '/home/karino/test_colorize.yml'  -s errorlog [error]


optparseを使ったオプション管理

大きな変更点はここ。
これを使えば、オプションと標準入力をしっかり区別することができる。
管理も楽。ヘルプもつけれる。
パーサを作成し、それを使ってオプションやそのほかの引数を取得する。

パーサの作成はこんな感じ。
def build_option_parser():    
"""Make Option Parser"""
    parser = OptionParser()
    parser.add_option(
            '-f', '--configuration-file-path',
            help="read configuration from. (default: '~/.colorize.yml')",
            default='~/.colorize.yml'
            )
    parser.add_option(
            '-s', '--color-scheme',
            help="set scheme of colorize. (default: 'all')",
            default="all"
            )
    parser.add_option(
            '-r', '--regular',
            help="set regular expression. (default: '^.*$')",
            default=r"^.*$"
            )
    parser.add_option(
            '-c', '--color',
            help="set color. (default: 'red')",
            default="red"
            )
    return parser

オプション・引数の取得はこんな感じ。
parser = build_option_parser()
    opts, args = parser.parse_args()

    # get options / color_scheme
    try:
        config_path = opts.configuration_file_path
        color_scheme = opts.color_scheme

        if color_scheme == 'all':
            color_scheme = [{
                    'regular':'(' + opts.regular + ')',
                    'color':opts.color
                    }]
        else:
            color_scheme = read_color_scheme(color_scheme, config_path)

    except Exception, e:
        parser.error(e)

0 件のコメント:

コメントを投稿