PYTHON MEBY

Pythonでコマンドライン引数を取得(sys.argv, argparse)

この記事では、Pythonでコマンドライン引数を取得する方法について説明します。sys.argvとargparseモジュールを使用した方法、それぞれのメリット・デメリット、そしてサンプルコードを紹介します。

目次

sys.argvによるコマンドライン引数の取得

Pythonでは、sys.argvリストを使用してコマンドライン引数を取得できます。sys.argv[0]はスクリプト名、sys.argv[1]以降はコマンドライン引数となります。

import sys

print(f"スクリプト名: {sys.argv[0]}")

if len(sys.argv) > 1:
    print(f"コマンドライン引数: {sys.argv[1:]}")
else:
    print("コマンドライン引数は指定されていません")

シンプルなスクリプトではsys.argvで十分ですが、引数の型チェックやヘルプメッセージ表示などができないため、複雑なアプリケーションには向いていません。

実行例:python your_script.py arg1 arg2 出力:スクリプト名: your_script.py コマンドライン引数: ['arg1', 'arg2']

argparseモジュールによるコマンドライン引数の高度な処理

argparseモジュールは、コマンドライン引数をより柔軟に、かつ安全に処理するためのモジュールです。引数の型チェック、ヘルプメッセージの自動生成、必須引数の指定などが可能です。

import argparse

parser = argparse.ArgumentParser(description='コマンドライン引数のサンプル')
parser.add_argument('filename', help='入力ファイル名')
parser.add_argument('-o', '--output', help='出力ファイル名', default='output.txt')
parser.add_argument('-v', '--verbose', action='store_true', help='詳細ログを出力')
args = parser.parse_args()

print(f"入力ファイル名: {args.filename}")
print(f"出力ファイル名: {args.output}")
print(f"詳細ログ出力: {args.verbose}")

実行例:python your_script.py input.txt -o result.txt -v 出力:入力ファイル名: input.txt 出力ファイル名: result.txt 詳細ログ出力: True

引数に-hまたは--helpを付けるとヘルプメッセージが表示されます。

argparseモジュールを使用することで、より堅牢で使いやすく、メンテナンスしやすいコマンドラインインターフェースを作成できます。

sys.argvとargparseの比較

sys.argvはシンプルで手軽に使用できますが、複雑な引数処理には不向きです。argparseは機能が豊富で、複雑なコマンドラインインターフェースにも対応できますが、コードが少し長くなります。プロジェクトの規模や複雑さに合わせて適切な方法を選択する必要があります。

簡単なスクリプトであればsys.argvで十分ですが、複雑なアプリケーションや、ユーザーフレンドリーなコマンドラインインターフェースを作成したい場合はargparseモジュールを使用することを強く推奨します。

サンプルコード

import argparse

parser = argparse.ArgumentParser(description='数値を合計するスクリプト')
parser.add_argument('numbers', type=int, nargs='+', help='合計する数値')
args = parser.parse_args()

total = sum(args.numbers)
print(f'合計: {total}')

実行例:python your_script.py 1 2 3 4 5 出力:合計: 15

関連記事