pythonコードでコマンドライン引数 (terminalで実行する際につけられる引数) を受け取る操作をまとめます。
argparse公式ドキュメント
https://docs.python.org/ja/3/library/argparse.html#
試行環境
Windows10
python3.6
sys.argvを使うやり方
こっちは簡単です。sys.argvがファイル名と引数を文字列で格納したlistになっているのでこれを使うだけです。
import sys
if __name__ == "__main__":
print(sys.argv)
print(len(sys.argv))
print(type(sys.argv))
(base) > python test.py a b 10 3.14
['test_receive_value1.py', 'a', 'b', '10', '3.14']
5
<class 'list'>
でもparseは自分でやらないといけませんのでちょっと面倒です。
argparseを使うやり方
argparse.ArgumentParser()を定義しておくと自動でparseしてくれます。
import argparse
if __name__ == "__main__":
parser = argparse.ArgumentParser(description='プログラムの説明') # parserを定義
# 受け取る引数を追加する
parser.add_argument('arg1', help='引数arg1の説明') # 必須の引数を追加
parser.add_argument('arg2', help='引数arg2の説明')
parser.add_argument('--arg3') # オプション引数(指定しなくても良い引数)を追加
parser.add_argument('-a', '--arg4') # '-a'が省略形、'--arg4'が正式名のオプション引数
args = parser.parse_args() # 引数を解析
print('arg1=', args.arg1)
print('arg2=', args.arg2)
print('arg3=', args.arg3)
print('arg4=', args.arg4)
省略したものはNoneが入ります。
> python test_receive_value2.py hoge fuga --arg3 uga
arg1= hoge
arg2= fuga
arg3= uga
arg4= None
-hオプションで使い方を確認することも出来ます。
> python test2.py -h
usage: test_receive_value2.py [-h] [--arg3 ARG3] [-a ARG4] arg1 arg2
プログラムの説明
positional arguments:
arg1 引数arg1の説明
arg2 引数arg2の説明
optional arguments:
-h, --help show this help message and exit
--arg3 ARG3
-a ARG4, --arg4 ARG4
現代的な引数処理をやろうと思ったらargparse.ArgmentParser()を使うやり方が良さそうです。
argparse応用編
以下はこちらの内容そのままです
https://qiita.com/kzkadc/items/e4fc7bc9c003de1eb6d0
省略した場合のdefault値を指定する
parser.add_argument('--message', default='hello!')
data型を指定する
parser.add_argument('--number', type=int) # 整数値(int)
parser.add_argument('--alpha', type=float, default=0.01) # 実数値(float)
呼ばれただけでTrueや定数を格納する
引数を与えなくても--hogeが呼ばれるだけで何かするようにできます。以下だとTrueが入ります。
parser.add_argument('--flag', action='store_true')
定数を入れたい場合は以下のようになります。
parser.add_argument('--flag', action='store_const', const=3.14)
選択肢にある引数しか受け取らない
parser.add_argument('--fruit', choices=['apple', 'banana', 'orange'])
複数個まとめて受け取る
nargs='*' で任意の数の引数を受け取るように出来ます。
parser.add_argument('--colors', nargs='*')
(base) > python test.py --colors red green blue
['red', 'green', 'blue']
nargs=3 などのように数を指定することもできます。
順不同で良いけど必須の引数を作る
parser.add_agument("-a", required=True)
かなり色々できて面白いです。レッツトライ!
参考にしたページ
https://qiita.com/taashi/items/07bf75201a074e208ae5
https://qiita.com/kzkadc/items/e4fc7bc9c003de1eb6d0