オプション解析器 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 + ' ?'
以上です。