オプション解析器 optparseを使ってみた

前回の続きでーす。今回は、オプション解析器、 optparseを使ってみました。使いかたは簡単です。

まずは、OptionParserのインスタンスを作成します

from optparse import OptionParser
op = OptionParser()

次に、解析するオプションを追加します。

op.add_option('-t', '--target', dest='target',  \
	default='/mnt/backup', \
	help='set backup destination to TARGET')

上の例では、コマンドライン上で-t hoge もしくは--target=hogeと入力するとtargetにhogeが格納されます。他にオプションがあれば、ズラズラっと定義していきます。最後に、parse_args()メソッドを呼んでコマンドラインを解析します。

opts, args = op.parse_argse()

print opts.target	# -> hogeと出力される
print args	# オプションの後に渡した文字列を格納したリストを出力

これを使って、メイン処理の部分を書きかえてみました

#! /usr/bin/python
# encoding: utf8
""" 
パーティションのバックアップコピーを作成する 
usage: partbackup -t TARGET <src1> [, <src2>, <src3>...]
"""

from re import match
from os import path
from mbackup import Partition, do_backup
from optparse import OptionParser

if __name__ == "__main__":
    op = OptionParser(usage='%prog [-t] src1[, src2, ...]',\
            version="%prog 0.1.0" )
    op.add_option('-t', '--target', dest='target',  default='/mnt/backup', 
            help='set backup destination to TARGET')

    opts, args = op.parse_args()

    # 複数のパーティションを、単一のパーティションに次々とコピー
    # していくのは意味がない
    if len(args) > 1 and match(r'/dev/', opts.target):
        raise RuntimeError,'don\'t copy multiple sources to a single partition'

    for partition in args:
        # どのパーティションを処理するのかを表示しておきます 
        print "[" + partition + "]"

        try:
            if match(r'/(?!dev)', opts.target):
                # opts.targetはディレクトリを指す文字列として解釈する
                if path.exists(opts.target):
                    do_backup(partition, opts.target + '/' + partition, True)
            else:
                with Partition(opts.target) as part:
                    do_backup(partition, part.get_mtpt(), True)

        except RuntimeError:
            print 'copy ' + partition, 'to', opts.target + ' ?'

以上です。