Python_コマンドライン引数
コマンドライン引数の取得
コマンドライン引数を取得するには、sys.argvを利用します。
引数は指定順に配列に格納されています。
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# vim:fileencoding=utf-8
# coding=utf8
import sys
def main(args):
# 引数の指定数を確認する。
if len(args) < 2:
print('Usage: # python %s args ... ' % args[0])
sys.exit(-1)
# 引数は配列として格納されます。
print(args)
# 引数の指定数を表示する。
print("argc : %d" % len(args))
# 各引数を表示する。
for idx, arg in enumerate(args):
print("arg{0} : {1}".format(idx, arg))
return 0
if __name__ == "__main__":
sys.exit(main(sys.argv))
argparseでオプション解析を行う。
argparseはpython標準ライブラリに用意されているCLIツールです。
コマンドラインの引数を解釈し、usageやエラーメッセージを自動的に作成します。
最小構成
argparseモジュールをimportして、メソッドを呼び出すだけでusageを作成することができます。
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# vim:fileencoding=utf-8
# coding=utf8
import sys
import argparse
def main():
parser = argparse.ArgumentParser()
parser.parse_args()
return 0
if __name__ == "__main__":
sys.exit(main())
これを「-h」または「--help」を付けて実行すると以下のようにusageが表示されます。
$ ./arg_test.py -h
usage: arg_test.py [-h]
optional arguments:
-h, --help show this help message and exit
位置引数
パラメータを位置引数(ポジショナル引数, Positional Arguments)で指定する場合、「-」なしでオプション定義します。
コマンドライン引数の数やtypeに合わせた型チェックを自動的に行うことが可能です。
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# vim:fileencoding=utf-8
# coding=utf8
import sys
import argparse
def main():
parser = argparse.ArgumentParser()
parser.add_argument("filename", help="target filename", type=str)
parser.add_argument("line", help="number of lines", type=int)
args = parser.parse_args()
print("filename=" + args.filename)
print("line = %d" % args.line)
return 0
if __name__ == "__main__":
sys.exit(main())
オプショナル引数
「-」を付けたオプション定義をすると、オプショナル引数(Optional Arguments)となります。
オプショナル引数は任意のパラメータを取得することができます。
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# vim:fileencoding=utf-8
# coding=utf8
import sys
import argparse
def main():
parser = argparse.ArgumentParser()
parser.add_argument("-f", help="target filename", type=str)
parser.add_argument("--line", help="number of lines", type=int)
parser.add_argument("-v", help="verbose mode", action="store_true")
args = parser.parse_args()
if args.f is not None: print("filename=" + args.f)
if args.line is not None: print("line = %d" % args.line)
if args.v: print("Verbose mode")
return 0
if __name__ == "__main__":
sys.exit(main())
詳細設定
argumentParserクラスのコンストラクタの引数やadd_argumentメソッドの引数を設定することで、オプションの扱い方を細かく設定できます。
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# vim:fileencoding=utf-8
# coding=utf8
import sys
import argparse
def main():
parser = argparse.ArgumentParser(
prog='arg_test.py', # プログラム名
usage='Demonstration of argparser', # プログラムの利用方法
description='description', # 引数のヘルプの前に表示
epilog='epilog', # 引数のヘルプの後で表示
)
parser.add_argument(
"-f", # オプション引数
help="target filename", # helpメッセージ
type=argparse.FileType('r'), # ファイルの存在チェックも行う
default="default.conf", # 引数がなかった場合に生成される値
required=False # 引数の省略可否
)
parser.add_argument(
"subcmd", #位置引数
help="This is sub command", # helpメッセージ
metavar="on | off", # メッセージで表示される引数の名前
choices=["on", "off"], # 引数として許される値の指定
type=str # 引数の型
)
args = parser.parse_args()
print(args.f)
print(args.subcmd)
return 0
if __name__ == "__main__":
sys.exit(main())