Pythonでコマンドライン引数を扱う方法:スクリプトをより柔軟に!
Pythonスクリプトを開発していると、「実行時に特定の情報を渡したい」「設定ファイルを変更せずに動作を変えたい」といったニーズが出てきます。そんな時に非常に役立つのがコマンドライン引数です。コマンドライン引数を使うことで、スクリプトの柔軟性が格段に上がり、さまざまな状況に対応できるようになります。この記事では、Pythonでコマンドライン引数を扱うための基本的な方法と、より高度なargparseモジュールの使い方を分かりやすく解説します。
目次
コマンドライン引数とは?
コマンドライン引数とは、Pythonスクリプトを実行する際に、スクリプト名の後に続く文字列のことです。これらの文字列は、スクリプト内で特別な意味を持つ情報として利用されます。
例えば、python my_script.py input.txt output.csv というコマンドを実行した場合、input.txtとoutput.csvがコマンドライン引数となります。
sys.argvを使った基本的な引数取得
Pythonで最もシンプルにコマンドライン引数を取得する方法は、標準ライブラリのsysモジュールを使用することです。sys.argvは、スクリプトに渡された引数のリストを格納しています。
1. sys.argvの基本
sys.argvリストの最初の要素(sys.argv[0])は、常に実行しているスクリプトのファイル名になります。それ以降の要素(sys.argv[1], sys.argv[2]など)が、渡されたコマンドライン引数です。
# get_args.py
import sys
print(f"スクリプト名: {sys.argv[0]}")
print(f"引数の数: {len(sys.argv) - 1}") # スクリプト名を除く
print(f"すべての引数: {sys.argv}")
if len(sys.argv) > 1:
print(f"最初の引数: {sys.argv[1]}")
上記のスクリプトを保存し、コマンドラインから実行してみましょう。
python get_args.py hello world 123
# 出力例:
# スクリプト名: get_args.py
# 引数の数: 3
# すべての引数: ['get_args.py', 'hello', 'world', '123']
# 最初の引数: hello
2. sys.argvの注意点
sys.argvは非常にシンプルですが、以下の点に注意が必要です。
-
すべて文字列: 渡される引数はすべて文字列として扱われます。数値として利用する場合は、
int()やfloat()などで型変換が必要です。 -
引数のチェック: 引数の数が不足していないか、予期せぬ引数が渡されていないかなどを、自分でチェックする必要があります。
# calculate.py
import sys
if len(sys.argv) < 3:
print("使い方: python calculate.py <数値1> <数値2>")
sys.exit(1) # エラー終了
try:
num1 = int(sys.argv[1])
num2 = int(sys.argv[2])
result = num1 + num2
print(f"{num1} + {num2} = {result}")
except ValueError:
print("エラー: 引数は数値である必要があります。")
sys.exit(1)
argparseを使った高度な引数解析
より複雑な引数(オプション、フラグ、サブコマンドなど)を扱う場合や、ヘルプメッセージを自動生成したい場合は、Python標準ライブラリの**argparseモジュール**が非常に強力です。プロフェッショナルなCLIツールを作成する際には必須と言えるでしょう。
1. argparseの基本的な流れ
argparseを使う基本的な手順は以下の通りです。
-
ArgumentParserオブジェクトを作成する。 -
add_argument()メソッドで引数を定義する。 -
parse_args()メソッドでコマンドライン引数を解析する。
# file_processor.py
import argparse
# 1. ArgumentParserオブジェクトを作成
parser = argparse.ArgumentParser(description="ファイルを処理するスクリプト")
# 2. 引数を定義
# 位置引数(必須)
parser.add_argument('input_file', help='処理対象の入力ファイル')
# オプション引数(任意)
parser.add_argument('--output', '-o', help='処理結果を書き込む出力ファイル (デフォルト: input_fileに.outを追加)')
parser.add_argument('--verbose', '-v', action='store_true', help='詳細な処理状況を表示')
# 3. コマンドライン引数を解析
args = parser.parse_args()
# 解析された引数にアクセス
print(f"入力ファイル: {args.input_file}")
if args.output:
print(f"出力ファイル: {args.output}")
else:
print(f"出力ファイル (デフォルト): {args.input_file}.out")
if args.verbose:
print("詳細モードが有効です。")
# ここでファイルの処理を行う(省略)
print("ファイル処理を実行中...")
2. argparseの主要な機能
位置引数とオプション引数
-
位置引数: コマンドラインで順番に指定される引数(例:
python script.py <input>)。-
parser.add_argument('引数名', ...)のようにハイフンなしで定義します。
-
-
オプション引数: ハイフン(
-)やダブルハイフン(--)で始まる引数(例:python script.py --verbose)。-
parser.add_argument('--オプション名', '-ショートカット', ...)のように定義します。
-
よく使うadd_argument()の引数
-
help: 引数の説明。これが自動的にヘルプメッセージに表示されます。 -
type: 引数の型を指定します(例:type=int,type=float)。argparseが自動で型変換を行います。 -
default: 引数が指定されなかった場合のデフォルト値。 -
action: 引数が指定された際の動作を定義します。-
'store_true'/'store_false': フラグとして機能させ、引数が存在すればTrue/Falseを格納します。 -
'count': 引数が現れた回数をカウントします(例:-vvvで3)。
-
-
required:Trueに設定すると、その引数が必須になります。 -
choices: 引数に指定できる値のリストを制限します。
# advanced_args.py
import argparse
parser = argparse.ArgumentParser(description="高度な引数解析の例")
# 必須の数値引数
parser.add_argument('count', type=int, help='処理する回数')
# 任意の色指定 (選択肢を限定)
parser.add_argument('--color', choices=['red', 'blue', 'green'],
default='blue', help='色を指定 (red, blue, greenのいずれか)')
# フラグ引数
parser.add_argument('--debug', action='store_true', help='デバッグモードを有効にする')
args = parser.parse_args()
print(f"処理回数: {args.count}")
print(f"選択された色: {args.color}")
print(f"デバッグモード: {args.debug}")
ヘルプメッセージの自動生成
argparseの大きな利点の一つは、引数を定義するだけで自動的に詳細なヘルプメッセージを生成してくれることです。
python file_processor.py --help
# 出力例:
# usage: file_processor.py [-h] [--output OUTPUT] [--verbose] input_file
#
# ファイルを処理するスクリプト
#
# positional arguments:
# input_file 処理対象の入力ファイル
#
# options:
# -h, --help show this help message and exit
# --output OUTPUT, -o OUTPUT
# 処理結果を書き込む出力ファイル (デフォルト: input_fileに.outを追加)
# --verbose, -v 詳細な処理状況を表示
どちらを選ぶべきか?
-
sys.argv:-
シンプルなスクリプト: 引数が1つか2つ程度で、複雑なオプションが不要な場合に最適です。
-
学習コストが低い: Pythonのリスト操作が分かればすぐに使えます。
-
-
argparse:-
複雑なCLIツール: 多数の引数、オプション、フラグ、サブコマンドなどが必要な場合に必須です。
-
堅牢な入力チェック: 型変換、デフォルト値、必須引数、選択肢の制限など、高度なチェック機能があります。
-
プロフェッショナルなヘルプメッセージ: 自動生成されるヘルプがユーザーにとって非常に分かりやすいです。
-
まとめ
Pythonでコマンドライン引数を扱う方法は、sys.argvのようなシンプルなアプローチから、argparseのような強力なモジュールまで多岐にわたります。簡単なスクリプトであればsys.argvで十分ですが、より汎用性が高く、ユーザーフレンドリーなツールを作成したい場合は、ぜひargparseの利用を検討してください。コマンドライン引数をマスターすることで、あなたのPythonスクリプトはさらに強力で柔軟なものになるでしょう。
■らくらくPython塾 – 読むだけでマスター
■プロンプトだけでオリジナルアプリを開発・公開してみた!!
■AI時代の第一歩!「AI駆動開発コース」はじめました!
テックジム東京本校で先行開始。
■テックジム東京本校
「武田塾」のプログラミング版といえば「テックジム」。
講義動画なし、教科書なし。「進捗管理とコーチング」で効率学習。
より早く、より安く、しかも対面型のプログラミングスクールです。
<短期講習>5日で5万円の「Pythonミニキャンプ」開催中。
<月1開催>放送作家による映像ディレクター養成講座
<オンライン無料>ゼロから始めるPython爆速講座

