Python初心者必見!コマンドライン引数の活用法10選

Pythonのコマンドライン引数の使い方を解説するイラストPython
この記事は約8分で読めます。

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればサンプルコードを活用して機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を凌駕する現役のプログラマチームによって監修されています。

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

Pythonはその強力な機能とユーザーフレンドリーな設計から、初心者からプロフェッショナルまで幅広いユーザーに利用されています。

その中でも、コマンドライン引数はPythonのプログラムをより柔軟に、効率的に扱うための重要なツールです。

この記事では、Pythonでコマンドライン引数を使う方法を、具体的なコード例と共に初心者向けに解説します。

●Pythonでのコマンドライン引数とは

コマンドライン引数とは、Pythonスクリプトを実行する際に、スクリプト名の後に渡す追加情報のことを指します。

これにより、同じスクリプトでも異なるパラメータを与えることで、多様な振る舞いをさせることが可能になります。

Pythonでは、これらの引数はsysモジュールのargvというリストとしてアクセスできます。

●コマンドライン引数の基本的な使い方

基本的なコマンドライン引数の使い方を学ぶために、まずは最もシンプルな例から始めてみましょう。

○サンプルコード1:基本的な引数の受け取り方

import sys

# 引数の個数を出力
print("引数の個数:", len(sys.argv))

# 引数それぞれを出力
for i, arg in enumerate(sys.argv):
    print("引数{}:{}".format(i, arg))

このコードでは、Pythonの標準ライブラリであるsysモジュールを使って、コマンドライン引数を取得しています。

引数は、sys.argvというリストとして格納されています。

リストの0番目の要素はスクリプト名(プログラム名)、1番目以降の要素がコマンドライン引数となります。

このコードをコマンドラインから実行すると、与えた引数の数と内容を出力します。

例えば、”python script.py arg1 arg2″のように実行すると、出力は以下のようになります。

引数の個数: 3
引数0:script.py
引数1:arg1
引数2:arg2

●詳細な使い方:オプションを活用した引数の取得

さて、基本的な引数の取得方法が分かったところで、次にオプションを使った引数の取得方法について見てみましょう。

オプションは、”-“や”–“で始まる引数のことで、特定の機能をオン・オフしたり、値を指定したりするために使用されます。

○サンプルコード2:オプション付きの引数の受け取り

import argparse

# 引数パーサの作成
parser = argparse.ArgumentParser(description='オプション付きの引数を試すスクリプト')
parser.add_argument('-n', '--name', help='あなたの名前を入力してください')

# 引数の解析
args = parser.parse_args()

print('こんにちは、{}さん'.format(args.name))

このコードでは、argparseというモジュールを使用して、オプション付きの引数を受け取ることができます。

ここでは、”-n”または”–name”というオプションに続けて入力された値を、あなたの名前として受け取り、挨拶のメッセージに使用しています。

このコードを”python script.py -n Alice”のように実行すると、出力は次のようになります。

こんにちは、Aliceさん

これで、オプション付きの引数の基本的な使い方を学ぶことができました。

●エラーハンドリング:引数のエラーを防ぐ方法

コマンドライン引数を使用する際には、想定外の引数が入力された場合や必要な引数が入力されなかった場合など、エラーを起こす可能性があります。

そのため、適切なエラーハンドリングが必要となります。

次に、argparseを使ってエラーハンドリングを行う方法を見ていきましょう。

○サンプルコード3:エラーハンドリングの例

import argparse

# 引数パーサの作成
parser = argparse.ArgumentParser(description='必須引数を試すスクリプト')
parser.add_argument('-n', '--name', required=True, help='あなたの名前を入力してください')

# 引数の解析
args = parser.parse_args()

print('こんにちは、{}さん'.format(args.name))

このコードでは、”required=True”とすることで、”–name”オプションを必須としています。

これにより、”–name”オプションが指定されていない場合はエラーメッセージが表示され、プログラムは終了します。

このコードを”python script.py”のように実行すると、エラーメッセージが表示されます。

usage: script.py [-h] -n NAME
script.py: error: the following arguments are required: -n/--name

これで、適切なエラーハンドリングが可能になりました。

●コマンドライン引数の応用例

コマンドライン引数を使ったプログラムは非常に多様で、その応用例は無限に広がっています。

ここでは、ファイル操作とデータのフィルタリングという二つの例を見てみましょう。

○サンプルコード4:ファイルの操作

import sys
import os

# ファイル名を引数から取得
filename = sys.argv[1]

# ファイルが存在するかどうかを確認
if not os.path.exists(filename):
    print(f'エラー: ファイル{filename}が見つかりません。')
    sys.exit(1)

# ファイルを開いて内容を表示
with open(filename, 'r') as file:
    print(file.read())

このコードでは、コマンドライン引数で指定されたファイル名のファイルを開き、その内容を表示します。ファイルが存在しない場合は、エラーメッセージを表示してプログラムを終了します。

このコードを”python script.py test.txt”のように実行すると、test.txtの内容が出力されます。

○サンプルコード5:データのフィルタリング

import sys

# フィルタリングする文字列を引数から取得
filter_word = sys.argv[1]

# 標準入力からデータを読み込み、フィルタリングする文字列が含まれている行だけを出力
for line in sys.stdin:
    if filter_word in line:
        print(line, end='')

このコードでは、コマンドライン引数で指定された文字列を含む行だけを標準入力から読み込んだデータから出力します。

このコードを”echo ‘Hello\nWorld’ | python script.py Hello”のように実行すると、”Hello”のみが出力されます。

●詳細なカスタマイズ:引数のカスタムパーサの作り方

argparseモジュールでは、引数のパーサを自分でカスタマイズすることができます。

ここでは、引数に制約を設けるカスタムパーサの作り方について見ていきましょう。

○サンプルコード6:カスタムパーサの作成例

import argparse

def check_positive(value):
    ivalue = int(value)
    if ivalue <= 0:
         raise argparse.ArgumentTypeError(f"{value}は正の整数である必要があります")
    return ivalue

# 引数パーサの作成
parser = argparse.ArgumentParser()
parser.add_argument('number', type=check_positive)

args = parser.parse_args()

print(f'入力された数値は{args.number}です')

このコードでは、コマンドライン引数で入力された値が正の整数であることをチェックするカスタムパーサを作成しています。

このコードを”python script.py -3″のように実行すると、エラーメッセージが表示されます。

usage: script.py [-h] number
script.py: error: argument number: -3は正の整数である必要があります

これで、引数に制約を設けるカスタムパーサの作り方を学ぶことができました。

●コマンドライン引数を使ったプログラムの注意点

コマンドライン引数を使ったプログラムを作成する際には、引数が適切に指定されているかを確認することが重要です。

特に、引数が必須である場合や、引数が特定の形式を持つべきである場合には、エラーハンドリングを適切に行うことで、プログラムの堅牢性を向上させることができます。

また、コマンドライン引数は、スクリプトを呼び出す際に公開される可能性があるため、セキュリティ上重要な情報(例えば、パスワードなど)を直接引数として渡すのは避けるべきです。

まとめ

この記事では、Pythonでのコマンドライン引数の基本的な使い方から、エラーハンドリング、カスタムパーサの作り方まで、詳しく解説しました。

これらの知識を活かして、Pythonスクリプトの利便性と効率性を向上させることができます。

さらなる学習の一環として、様々なコマンドライン引数の組み合わせを試してみたり、自分でカスタムパーサを作成してみると良いでしょう。

Pythonでのコマンドライン引数の活用法は、あなたのPythonスキルをさらに高めるための重要なステップとなります。