コマンドライン引数の処理(optparse)
Python
ArgumentParser
を使う
deprecatedOptionParser
クラスを使う
getopt
とか OptionParser
はオプション引数のみ対象にしているが、
ArgumentParser
はオプション引数も位置引数も扱えるので便利で良い
py
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-v', action='store_true')
parser.add_argument('-g', '--group-name', action='store', default="test", help="Group name is group name")
parser.add_argument('--max-lines', default=1000, type=int)
parser.add_argument('basedate', nargs='?') # '?' は 0 or 1、'*' は可変(0コ以上)、'+'は1コ以上、なのだと思う
args = parser.parse_args()
if args.basedate == None:
..
指定可能な書式
bash
./a.py -f a.txt
./a.py -fa.txt
./a.py --file=a.txt
./a.py --file a.txt
項目 | 内容 |
---|---|
option | store で指定した名前のメンバをもつオブジェクト |
args | 名前なしの引数が配列で入る |
| action | 動作 | 使いみち |
|:-|:-|
| store
| 値つきの引数 | --file a.txt
|
| store_true
| 指定したら true に | --enable-xxmode
|
その他
- 型を指定すると、型チェックをしてくれる
- 正規表現とかでのチェックもできたらなあって思ったけど、下のように自分でやれ方式のようだ
py
if options.a === 'xx':
parser.error('a should be xx')
TODO: Help の Formatterの指定。デフォルト値とか出せるのだっけ
Bash
Bash 組み込みの getopts
gnu コマンドの getopt
- いろいろ出来そうだが、いろいろ頑張るならもう python とかでいいよねってなった頃
Ruby
OptionParser
クラスを使う
rb
引数の処理 (OptionParser, optparse)
require 'optparse'
opt = OptionParser.new
opt.on('-a') {|v| v1 = v } # -a が指定された時に v は true
opt.on('-b filename') {|v| v2 = v } # v は指定した引数 (-b の直後の文字列)
opt.on('-c [message]') {|v| v3 = v } # 省略可能な引数
opt.on('-d, --del') {|v| v4 = v } # --xxx 形式も受け付ける
opt.on('--echo') {|v| v5 = v } # --xxx 形式も受け付ける
opt.on('--[no-]file') {|v| v6 = v } # --no-file と指定すると v は false
opt.on('--group[=gid]') {|v| v7 = v } # --xxx 形式も引数を指定可能
opt.on('-i', 'あああ') {|v| v8 = v } # --help で出るメッセージを指定
begin
opt.parse!(ARGV) # ARGVを解釈
# ※ "!" をつけるとARGVから "-x" は取り除かれる)
rescue OptionParser::InvalidOption => e
puts e.message # 「invalid option: -t」のように出る
end