Pythonスクリプトをコマンドプロンプトから実行する際に、引数を指定して実行したい場合に、argparse モジュールを使用します。
argparse には、引数を定義することでコマンドのヘルプ表示を自動的に生成する機能もあります。
使用モジュール
argparse は Python標準ライブラリに含まれていますので、インストールは不要です。
インストール:不要
モジュールのインポート
argparse モジュールをインポートします。
1 | import argparse |
argparse でコマンドライン引数を受け取る
コマンドライン引数を受け取るには、argparse.ArgumentParser()
で parser
インスタンスを作成して、parser.add_argument()
で引数を追加します。
parser.add_argument(‘arg’, help=’引数の説明’)
description
, help
は省略可能です。
以下がコマンドライン引数を受け取るサンプルプログラムです。argtest.py
として保存します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | import argparse # パーサーのインスタンスを作成 parser = argparse.ArgumentParser() # 引数を受け取る parser.add_argument('arg1') parser.add_argument('arg2') # 引数を解析 args = parser.parse_args() # 受け取った引数を出力 print('arg1=', args.arg1) print('arg2=', args.arg2) |
スクリプト実行時に、スペースを入れて引数を2個入力します。
以下の例では、test, 1 を引数に指定しています。
1 2 3 | C:\>python argtest.py test 1 arg1= test arg2= 1 |
以下のように引数を1つしか指定しないと、error: the following arguments are required
というエラーが発生します。
1 2 3 | C:\> python argtest.py test usage: argtest.py [-h] arg1 arg2 argtest.py: error: the following arguments are required: arg2 |
上記の例では引数は必須入力となるため、このようなエラーが発生します。
引数を省略してもよい場合は、次に説明するオプション引数として指定します。
オプション引数を指定する
オプション引数を指定する場合は、add_argument()
メソッドの名称に「-」または「–」を接頭語にした文字列を指定します。
名称が1文字の場合はシングルダッシュ「-」、複数文字列の場合はダブルダッシュ「–」にするのが慣例のようです。 (例 -s, –string)
1 2 3 4 5 6 7 8 9 10 11 | import argparse parser = argparse.ArgumentParser() parser.add_argument('arg1') parser.add_argument('-s') args = parser.parse_args() print('arg1=', args.arg1) print('s=', args.s) |
オプション引数の名称と引数を入力して実行すると、以下のように出力されます。
1 2 | C:\> python argoption.py test -s 2 test 2 |
オプション引数を省略すると、デフォルト値は None
のため、以下のように出力されます。
1 2 | C:\> python argoption.py test test None |
オプション引数のデフォルト値を指定する
オプション引数のデフォルト値は None
ですが、デフォルト値を指定することもできます。
add_argument()
の引数に default=
を追加して値を指定します。
1 2 3 4 5 6 7 8 9 10 | import argparse parser = argparse.ArgumentParser() parser.add_argument('arg') parser.add_argument('-s', default='hoge') args = parser.parse_args() print('arg1=', args.arg) print('s=',args.s) |
実行結果は以下のようになります。
1 2 3 4 5 6 7 | C:\> python argoption.py test arg1= test s= hoge C:\> python argoption.py test 3 arg1= test s= 3 |
型を指定する
コマンドライン引数で指定された値は、デフォルトでは文字列型です。
数値を指定したい場合は、add_argument()
の引数に type
を追加して int
や float
を指定します。
1 2 3 4 5 6 7 8 9 10 11 12 13 | import argparse parser = argparse.ArgumentParser() parser.add_argument('arg1') parser.add_argument('-i', type=int, default=0) parser.add_argument('-f', type=float, default=0) args = parser.parse_args() print('arg1=', args.arg1) print('i=', args.i) print('f=', args.f) |
入力値が自動で、指定した型に変換されます。
1 2 3 4 | C:\> python argoption.py test -i 1 -f 3 arg1= test i= 1 f= 3.0 |
オプション引数を必須指定にする
数値を指定したい場合は、add_argument()
の引数に required=True
を追加します。
1 2 3 4 5 6 7 8 9 10 11 12 13 | import argparse parser = argparse.ArgumentParser() parser.add_argument('-s', required=True) parser.add_argument('-i', type=int, required=True) parser.add_argument('-f', type=float, required=True) args = parser.parse_args() print('s=', args.s) print('i=', args.i) print('f=', args.f) |
必須項目の引数が複数ある場合、入力順序を間違えるとエラーになってしまいますが、オプション引数を必須項目指定することで、順序を気にせずコマンド入力することができます。
1 2 3 4 | C:\> python argoption.py -f 3 -i 1 -s test s= test i= 1 f= 3.0 |
複数の引数を受け取る
add_argument()
の引数に nargs
を追加して引数の個数を指定します。
1 2 3 4 5 6 7 8 | import argparse parser = argparse.ArgumentParser() parser.add_argument('--words', nargs='2') args = parser.parse_args() print(args.words) |
実行結果は以下になります
1 2 | C:\> python argoption.py --words a b ['a', 'b'] |
引数の個数が不定の場合は nargs='*'
とすることで受け取ることができます。
1 2 3 | parser.add_argument('--words', nargs='*') args = parser.parse_args() print(args.words) |
実行結果
1 2 | C:\> python argoption.py --words a b c d ['a', 'b'. 'c', 'd'] |
アクションを指定する
デフォルトのアクションは値を格納する store
になっていますが、アクションを指定することで、動作を変更することが可能です。
変更するには add_argument()
の引数 action
で動作を指定します。
定数を格納する
action='store_const'
を指定することで、const
で設定した定数を格納します。
1 2 3 4 5 6 7 8 | import argparse parser = argparse.ArgumentParser() parser.add_argument('-c', action='store_const', const=42) args = parser.parse_args() print(args.c) |
オプション引数名を指定することでアクションが実行されます。引数名を指定しないと None
が格納されます。
1 2 3 4 5 | C:\> python argconst.py -c 42 C:\> python argconst.py None |
フラグとして使用する
action='store_true', 'store_false'
を指定することで、True, False
フラグを格納することができます。デフォルト値はそれぞれ False, True
になります。
1 2 3 4 5 6 7 8 9 | import argparse parser = argparse.ArgumentParser() parser.add_argument('--st', action='store_true') parser.add_argument('--sf', action='store_false') args = parser.parse_args() print(args.st, args.sf) |
オプション引数名を指定することで、動作させることができます。
1 2 3 4 5 6 7 | C:\> python argflag.py --st --sf True False C:\> python argflag.py False True |
定数値をリストに格納する
action='append_const'
とすることで、指定した定数値を、引数で指定した回数分リストに追加します。
1 2 3 4 5 6 7 8 | import argparse parser = argparse.ArgumentParser() parser.add_argument('--num', action='append_const', const=10) args = parser.parse_args() print(args.num) |
実行結果は以下になります。
1 2 | C:\> python argappend.py --num --num [10, 10] |
ヘルプを表示する
1 2 3 4 5 6 7 8 9 10 11 12 13 | import argparse parser = argparse.ArgumentParser(description='ヘルプサンプル') parser.add_argument('-s', '--string', required=True, help='文字列') parser.add_argument('-i', '--integer', type=int, required=True, help='整数') parser.add_argument('-f', '--float', type=float, required=True, help='実数') args = parser.parse_args() print('s=', args.s) print('i=', args.i) print('f=', args.f) |
実行結果は以下のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 | C:\>arghelp.py -h usage: arghelp.py [-h] -s STRING -i INTEGER -f FLOAT ヘルプサンプル optional arguments: -h, --help show this help message and exit -s STRING, --string STRING 文字列 -i INTEGER, --integer INTEGER 整数 -f FLOAT, --float FLOAT 実数 |
argparse を使わないで引数を取得する
Python標準のsys モジュールでも、コマンドライン引数を取得することができます。
1 2 3 4 5 6 | import sys args = sys.argv print(args) print(args[1]) print(args[2]) |
実行結果です。
1 2 3 4 | C:\>python sysarg.py test 5 ['sysarg.py', 'test', '5'] test 5 |
コマンドライン引数を指定してPythonスクリプトを実行する方法を解説しました。
・関連記事:【Win11対応】Pythonスクリプトを自動実行する方法
・関連記事:Pythonスクレイピングでメルカリの商品情報を自動取得する(2022年版)