Masayan tech blog.

  1. ブログ記事一覧>
  2. Pythonでコマンドライン引数を扱う方法2種類を紹介

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

公開日

環境

  • 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]移行は、コマンドラインから渡した引数が入ります
  • コマンドラインから引数を指定する際は、半角スペースを入れる必要があります

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

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でコマンドライン引数を扱う方法について2種類紹介しています。どちらも標準ライブラリですが、argparseがおすすめです。理由は、argparseのほうが、引数で受け取るデータ型を指定できたり、引数を省略した場合のdefault値を指定できるためです。