Pythonでコマンドライン引数を渡す方法
Pythonでコマンドライン引数を渡す方法をご紹介します。
目次
条件
- Python 3.7.0
sys.argvを用いる方法
sys.argvを用いる場合は非常に簡単です。
以下にサンプルプログラムを示します。
サンプルプログラム
# argvTest.py
import sys
print('=== コマンドライン引数 ===')
args = sys.argv
print('■引数リスト')
print(args)
print('■引数個別')
print(args[0])
print(args[1])
print(args[2])
実行結果1
>python argvTest.py test1 test2 === コマンドライン引数 === ■引数リスト ['argvTest.py', 'test1', 'test2'] ■引数個別 argvTest.py test1 test2
実行プログラムの後にスペースを空けて文字列を渡せばOKです。
引数リストの1つ目が「実行ファイル名」になるところがポイントです。
実行結果2
>python argvTest.py test1
=== コマンドライン引数 ===
■引数リスト
['argvTest.py', 'test1']
■引数個別
argvTest.py
test1
Traceback (most recent call last):
File "argvTest.py", line 13, in <module>
print(args[2])
IndexError: list index out of range
渡す引数の数が、プログラム内でアクセスするリストサイズより小さいとエラーになります。
sys.argvを用いたコマンドライン引数取得は簡単ですが、引数取得後にプログラム内で各種エラー処理が必要になります。
argparseを用いる方法
argparseを用いることで、「プログラムhelpの表示」や「引数の各種チェック」などを行うことができます。
実運用で使用するプログラムは「argparse」を用いた実装を行う方が無難です。
以下にサンプルプログラムを示します。
以下のような処理を行うプログラムです。
- 何も引数を渡さない場合:デフォルトモードで動作
- 引数に日時(YYYY/MM/DD)を渡す場合:特定モードで動作
サンプルプログラム
# argparseTest.py
import argparse
from datetime import datetime as dt, timedelta
## コマンドライン引数を受け取る関数
def get_args():
parser = argparse.ArgumentParser(
description='Set the target date if you want to regist specific date data.')
parser.add_argument('--target', metavar='YYYY/MM/DD', type=str,
help='Target date to regist specific date data.')
args = parser.parse_args()
return(args)
## main関数
def main():
args = get_args() # コマンドライン引数を取得
if getattr(args, 'target'): # 'target'に値が渡されているか確認
print('Processing specfic mode.')
print('target args = ' + args.target)
target_datetime = dt.strptime(args.target, '%Y/%m/%d')
print(target_datetime)
else:
print('Processing default mode.')
## main関数を実行
if __name__ == '__main__':
main()
実行結果(引数なし)
>argparseTest.py Processing default mode.
実行結果(引数あり)
>argparseTest.py --target 2018/12/14 Processing specific mode. target args = 2018/12/14 2018-12-14 00:00:00
実行結果(引数不足)
>argparseTest.py --target usage: argparseTest.py [-h] [--target YYYY/MM/DD] argparseTest.py: error: argument --target: expected one argument
実行結果(余計な引数あり)
>argparseTest.py --target 2018/12/14 aa usage: argparseTest.py [-h] [--target YYYY/MM/DD] argparseTest.py: error: unrecognized arguments: aa
実行結果(help表示)
>argparseTest.py -h usage: argparseTest.py [-h] [--target YYYY/MM/DD] Set the target date if you want to regist specific date data. optional arguments: -h, --help show this help message and exit --target YYYY/MM/DD Target date to regist specific date data.
>argparseTest.py --help usage: argparseTest.py [-h] [--target YYYY/MM/DD] Set the target date if you want to regist specific date data. optional arguments: -h, --help show this help message and exit --target YYYY/MM/DD Target date to regist specific date data.
プログラム作成に数行の手間はかかりますが、上記のように引数チェックやhelp表示も出来て便利です。
argparseは他にも様々な設定項目がありますので、詳細は公式ドキュメントをご参照ください。
参考
Python公式:システムパラメータと関数
https://docs.python.org/ja/3/library/sys.html#sys.argv
Python公式:argparse — コマンドラインオプション、引数、サブコマンドのパーサー
https://docs.python.org/ja/3/library/argparse.html#module-argparse


