Pythonのコマンドライン引数
Pythonのコマンドライン引数の取り扱いを容易にする ArgumentParser について述べる。
べたなコマンドライン引数の受け取り方
ArgumentParser を使うほどではなく、1個の引数をちょっとつけたい、とか言う程度なら、sys.argv を使うのが楽。
import sys
if __name__ == '__main__':
print(len(sys.argv))
print(sys.argv)
こんだけ。
sys.argvには配列で値が入っている。
何個入っているかは配列なので len でわかる。
一番先頭にはプログラム名が入っているので、必ずlen(sys.argv)は1以上の値だし、配列のsys.argv[0]がnullになることもない。
逆に気をつけないといけないのが、引数が入っているのは sys.argv[1]以降ということ。
コマンドライン引数の受け取り方
以下の用に記述すると、コマンドライン引数を順番に取得できる。
import argparse
〜
def main():
parser = argparse.ArgumentParser(description='説明文')
parser.add_argument('args1')
args = parser.parse_args()
print(args.args1)
argparse.ArgumentParserでparser変数を作り、あとは引数がそこに入るので、
args.引数名で値を取得する。
コマンドライン引数にオプションを付けたい
-(ハイフン)をつければ良い。一つだと短縮オプションになる。
(短縮オプション名では値を取得できないので注意)
import argparse
〜
def main():
parser = argparse.ArgumentParser(description='説明文')
parser.add_argument('-a', '--args1')
args = parser.parse_args()
print(args.args1)
コマンドライン引数を必須にしたい
そもそもオプション引数じゃない場合は強制的に必須になる。
オプション引数の場合は、required=Trueをつければ必須になる。
parser.add_argument('-a', '--args1', required=True)
コマンドライン引数の型を指定する
typeで指定できる。intにしたい場合は以下のようにすれば良い。
parser.add_argument('-a', '--args1', type=int)
typeにboolを指定してはいけない
boolを指定しても望んだ挙動はしない。
Trueを渡そうがFalseを渡そうが常にTrue。
boolではなく、strtoboolを指定すれば望んだ挙動になる。
import argparse
from distutils.util import strtobool
〜
parser.add_argument('-o', '--option', type=strtobool)