コンテンツにスキップ

Top

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)