Pythonでコマンドライン引数を扱う方法2種類を紹介

環境

  • Windows 10
  • Python 3.9.4
  • VSCode

使用するソースコード

以下の公開リポジトリに置いています

GitHub - masayan1126/tao-py-py: 作業自動化用 Python ライブラリ
作業自動化用 Python ライブラリ. Contribute to masayan1126/tao-py-py development by creating an account on GitHub.

実装

masayan
masayan

sysモジュールのargvもしくは、argparseを使用することで、

コマンドライン引数のリストが取得できます。

 

なお、上記はいずれも標準モジュールです。

 

sysモジュールのargv

コマンドラインから以下のように引数を2つ渡してhoge.pyを実行します

pipenv run python packages/hoge.py 150 2
  • args[0]には、実行したpythonスクリプトのファイル名が入ります
  • args[1]移行は、コマンドラインから渡した引数が入ります
  • コマンドラインから引数を指定する際は、半角スペースを入れる必要があります

hoge.py

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

masayan
masayan

argparseは、以下のようなメリットがあるので、個人的にはsys.argvよりもおすすめです。

  • コマンドラインから引数で受け取るデータ型を指定できる
  • 引数を省略した場合のdefault値を指定できる
  • Enumのように、予めプログラム上に配列で指定した値しか受け取れなくできる

コマンドラインから以下のように引数を2つ渡してhoge.pyを実行します

pipenv run python packages/hoge.py 150 2
  • argparse.ArgumentParser()でインスタンスを作成し、add_argumentでコマンドラインから受け取る引数名と型を指定する
  • 実際に受けとった引数を使用する場合は、args.hogeの形で取り出すことが可能
  • つまり、argvよりもオブジェクト指向っぽい使い方をすることが可能

hoge.py

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学習におすすめの書籍

独習Python/山田祥寛【3000円以上送料無料】
bookfan 1号店 楽天市場店
¥ 3,300(2023/01/31 18:22時点)
タイトルとURLをコピーしました