このモジュールはsys.argv
に入っているコマンドラインオプションの構文解
析を支援します。
`-
' や `-
-
' の特別扱いも含めて、
Unixのgetopt()と同じ記法をサポートしています。
3番目の引数(省略可能)を設定することで、
GNUのソフトウェアでサポートされているような長形式のオプションも利用することが
できます。
このモジュールは1つの関数と例外を提供しています:
args, options[, long_options]) |
注意: GNUの getopt()とは違って、オプションでない引数の後は全て オプションではないと判断されます。これは GNUでない、Unixシステムの挙 動に近いものです。
long_optionsは長形式のオプションの名前を示す文字列のリストです。
名前には、先頭の'-
-'
は含めません。引数が必要な場合
には名前の最後に等号("=")を入れます。長形式のオプションだけを
受けつけるためには、optionsは空文字列である必要があります。
長形式のオプションは、該当するオプションを一意に決定できる長さまで入力さ
れていれば認識されます。たとえば、long_optionsが
['foo', 'frob']
の場合、--foは--foo
に該当しますが、--f では一意に決定できないので、
GetoptErrorが発生します。
返り値は2つの要素から成っています: 最初は
(option, value)
のタプルのリスト、2つ目はオプションリス
トを取り除いたあとに残ったプログラムの引数リストです(argsの末尾部
分のスライスになります)。
それぞれの引数と値のタプルの最初の要素は、短形式の時はハイフン
1つで始まる文字列(例:'-x'
)、長形式の時はハイフン2つで始まる文字
列(例: '-
-long-option'
)となり、引数が2番目の要素になりま
す。引数をとらない場合には空文字列が入ります。オプションは見つかった順
に並んでいて、複数回同じオプションを指定することができます。長形式と短
形式のオプションは混在させることができます。
args, options[, long_options]) |
この関数はデフォルトでGNUスタイルのスキャンモードを使う以外は getopt()と同じように動作します。つまり、オプションと オプションでない引数とを混在させることができます。getopt()関 数はオプションでない引数を見つけると解析をやめてしまいます。
オプション文字列の最初の文字が '+'にするか、環境変数 POSIXLY_CORRECTを設定することで、 オプションでない引数を見つけると解析をやめるように振舞いを変えることがで きます。
バージョン 2.3 で 新たに追加 された仕様です。
引数リストの中に認識できないオプションがあった場合か、引数が必要なオプショ ンに引数が与えられなかった場合に発生します。例外の引数は原因を示す文字 列です。長形式のオプションについては、不要な引数が与えられた場合にもこ の例外が発生します。msg属性とopt属性で、エラーメッセー ジと関連するオプションを取得できます。特に関係するオプションが無い場合 にはoptは空文字列となります。
バージョン 1.6 で 変更 された仕様: GetoptError は errorの別名として導入されました。
Unixスタイルのオプションを使った例です:
>>> import getopt >>> args = '-a -b -cfoo -d bar a1 a2'.split() >>> 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 = s.split() >>> 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']
スクリプト中での典型的な使い方は以下のようになります:
import getopt, sys def main(): try: opts, args = getopt.getopt(sys.argv[1:], "ho:v", ["help", "output="]) except getopt.GetoptError: # ヘルプメッセージを出力して終了 usage() sys.exit(2) output = None verbose = False for o, a in opts: if o == "-v": verbose = True if o in ("-h", "--help"): usage() sys.exit() if o in ("-o", "--output"): output = a # ... if __name__ == "__main__": main()
参考: