6.3 標準モジュール getopt

 

このモジュールは、スクリプトで sys.argv 中のコマンドライン引数を解析 する時に役立ちます。Unix の getopt() 関数と同様の引数の書式を (`-' や `--' の形式の引数が特別な意味を持つことも 含めて)サポートしています。 GNU ソフトウエアによってサポートされているような長い(2文字以上の)オプション も、3番目のオプション(省略可能)の引数により使用することができます。 このモジュールは、1つの関数と1つの例外を提供しています。

getopt (args, options[, long_options])
コマンドラインオプション、パラメータリストを解析します。args は、解析 する引数のリストです。しかし、リストの先頭の要素は、実行中のプログラム名では 無いので、ほとんどの場合は "sys.argv[1:]" と指定することになります。 options は、スクリプトが受け付けるオプション文字を並べた文字列です。 この時、オプションがさらに引数を必要とする場合には、オプションの後にコロン(:) を記述します。(Unix の getopt() と同じフォーマットです。) long_options に、長い(2文字以上の)オプションの名前を表す文字列のリスト が指定された場合は、それらのオプションもサポートされます。ただし、オプションの 名前を表す文字列の中には、先頭の '--' は含めないでください。 また、オプションがさらに引数を必要とする場合は、オプション名の後に等号 ('=')を記述してください。

戻り値は、2つの要素で構成されています。最初の要素は、 (option, value) の組(タプル)のリストです。2番目の 要素は、オプションリストを取り除いた後の、それ以降に記述された引数のリスト です。(最初の引数からそれ以降のスライスです。) 戻り値の option と value の組はそれぞれが、最初の要素としてハイフンで始まる オプション名(例えば、'-x')を、また2番目の要素としてオプションに 対応する引数を持っています。ただし、オプションが引数を必要としないものは、 2番目の要素は空の文字列になります。 リスト内のオプションは、見つかった順(指定された順)に並べられています。また、 同じオプションを2回以上指定することも許されます。さらに、長い(2文字以上の) オプションと短い(1文字の)オプションを、混在させて指定してもかまいません。

error
引数リストの中に認識できないオプションがあった場合、または引数を必要とする オプションに引数が指定されなかった場合に、この例外があげられます。 例外への引数は、エラーの原因を表す文字列です。引数を必要としていない長い オプションに引数を与えた場合も、この例外があげられます。

Unix スタイルのオプションのみを使った例です。

>>> import getopt, string
>>> args = string.split('-a -b -cfoo -d bar a1 a2')
>>> args
['-a', '-b', '-cfoo', '-d', 'bar', 'a1', 'a2']
>>> optlist, args = getopt.getopt(args, 'abc:d:')
>>> optlist
[('-a', ''), ('-b', ''), ('-c', 'foo'), ('-d', 'bar')]
>>> args
['a1', 'a2']
>>>

長い名前のオプションを使う場合も同様に簡単です。

>>> s = '--condition=foo --testing --output-file abc.def -x a1 a2'
>>> args = string.split(s)
>>> args
['--condition=foo', '--testing', '--output-file', 'abc.def', '-x', 'a1', 'a2']
>>> optlist, args = getopt.getopt(args, 'x', [
...     'condition=', 'output-file=', 'testing'])
>>> optlist
[('--condition', 'foo'), ('--testing', ''), ('--output-file', 'abc.def'), ('-x',
 '')]
>>> args
['a1', 'a2']
>>>

guido@python.org