環境
- Windows 10
- Python 3.9.4
- VSCode
実装
sysモジュールのargvもしくは、argparseを使用することで、コマンドライン引数のリストが取得できます。なお、上記はいずれも標準モジュールです。
sysモジュールのargv
コマンドラインから以下のように引数を2つ渡してhoge.pyを実行します
pipenv run python packages/hoge.py 150 2
- args[0]には、実行したpythonスクリプトのファイル名が入ります
- args[1]移行は、コマンドラインから渡した引数が入ります
- コマンドラインから引数を指定する際は、半角スペースを入れる必要があります
import sys
args = sys.argv
print(args[0]) # packages/hoge.py
price = int(args[1]) # 150
quantity = int(args[2]) # 2
print(price * quantity) # 300
argparse
argparseは、以下のようなメリットがあるので、個人的にはsys.argvよりもおすすめです。
- コマンドラインから引数で受け取るデータ型を指定できる
- 引数を省略した場合のdefault値を指定できる
- Enumのように、予めプログラム上に配列で指定した値しか受け取れなくできる
コマンドラインから以下のように引数を2つ渡してhoge.pyを実行します
pipenv run python packages/hoge.py 150 2
- argparse.ArgumentParser()でインスタンスを作成し、add_argumentでコマンドラインから受け取る引数名と型を指定する
- 実際に受けとった引数を使用する場合は、args.hogeの形で取り出すことが可能
- つまり、argvよりもオブジェクト指向っぽい使い方をすることが可能
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("price", type=int)
parser.add_argument("quantity", type=int)
args = parser.parse_args()
print(args.price * args.quantity) # 300
任意の引数とデフォルト値の設定方法は以下の通り
- add_argument("--price"のように、--をつけると、任意のコマンド引数になり、キーワード引数defaultでデフォルト値を指定する
- 実行時には指定してもしなくても良くなる(指定されなかった場合はNone)
- 指定する順番も自由
- pipenv run python packages/hoge.py 2 のように実行すると、デフォルトのpriceが100なので、100×2となり結果は200となる
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--price", type=int, default=100)
parser.add_argument("quantity", type=int)
args = parser.parse_args()
print(args.price * args.quantity) # 200
まとめ
いかがでしたでしょうか。本記事では、Pythonでコマンドライン引数を扱う方法について2種類紹介しています。どちらも標準ライブラリですが、argparseがおすすめです。理由は、argparseのほうが、引数で受け取るデータ型を指定できたり、引数を省略した場合のdefault値を指定できるためです。