Python:起動時引数の取得方法

NO IMAGE

コンソールで実行する場合など、Pythonでも起動時の引数を拾いたい場合がある。

その場合、argparseを使うと便利なのだが、理解するのがなかなか大変だった。そこで、ある程度理解した状態の、サンプルプログラムを掲載しておく。

#!python3

import argparse

parser = argparse.ArgumentParser()

# 必ず必要な引数
parser.add_argument("value", type=int, help="必ず入れなきゃならない数値")

# 必ずしも必要ではない引数(省略すると999999になる)
parser.add_argument("-hd", "--hasdefault", type=int,
                    default=999999, help="デフォルト値のある数値オプション")

# デフォルト値のない引数
parser.add_argument("-nd", "--nodefault", type=int,
                    help="デフォルト値のない数値のオプション")

# 値が限定された引数
parser.add_argument("-sv", "--selectvalue", type=int, choices=["1", "3", "10"],
                    help="1,3,10しか許されないオプション")

# 副パラメーターの付かないオプション store_trueは、引数があった場合、args.sayhello=true となる
parser.add_argument("-s", "--sayhello", action="store_true", help="helloと言います")

# 副パラメーターの付かないオプション store_trueは、引数があった場合、args.sayhello=true となる
parser.add_argument("-ds", "--dontsayhello",
                    action="store_false", help="helloと言いません")

# 引数を判定
args = parser.parse_args()

# 引数に応じた動作
print("-hdオプションの値 : "+str(args.hasdefault))
print("-ndオプションの値 : "+str(args.nodefault))

if args.sayhello:
    print("say hello!")
if not args.dontsayhello:
    print("okay, don't say hello!")

print("input number is "+str(args.value))

実行結果はこんな感じになる。

$ python3 getargs.py --help
usage: getargs.py [-h] [-hd HASDEFAULT] [-nd NODEFAULT] [-sv {1,3,10}] [-s]
                  [-ds]
                  value

positional arguments:
  value                 必ず入れなきゃならない数値

optional arguments:
  -h, --help            show this help message and exit
  -hd HASDEFAULT, --hasdefault HASDEFAULT
                        デフォルト値のある数値オプション
  -nd NODEFAULT, --nodefault NODEFAULT
                        デフォルト値のない数値のオプション
  -sv {1,3,10}, --selectvalue {1,3,10}
                        1,3,10しか許されないオプション
  -s, --sayhello        helloと言います
  -ds, --dontsayhello   helloと言いません
$ python3 getargs.py
usage: getargs.py [-h] [-hd HASDEFAULT] [-nd NODEFAULT] [-sv {1,3,10}] [-s]
                  [-ds]
                  value
getargs.py: error: the following arguments are required: value
$ python3 getargs.py 3
-hdオプションの値 : 999999
-ndオプションの値 : None
input number is 3
python3 getargs.py a
usage: getargs.py [-h] [-hd HASDEFAULT] [-nd NODEFAULT] [-sv {1,3,10}] [-s]
                  [-ds]
                  value
getargs.py: error: argument value: invalid int value: 'a'

# 主引数は整数しか受け付けない宣言をしているためエラー
python3 getargs.py -s 3
-hdオプションの値 : 999999
-ndオプションの値 : None
say hello!
input number is 3

#-sオプションをつけると、"say hello!"と出力する
python3 getargs.py -ds 3
-hdオプションの値 : 999999
-ndオプションの値 : None
okay, don't say hello!
input number is 3