1. Pythonでのコマンドライン引数の基本的な使い方
コマンドライン引数とは?
Pythonプログラムを実行するときに、実行コマンドと一緒に渡す追加の情報を「コマンドライン引数」といいます。これにより、プログラムの動作を柔軟に変化させたり、外部からデータを簡単に渡したりすることが可能になります。たとえば、ファイル名や設定値を引数として渡すことで、プログラムの内容を動的に変更できます。
sys.argv
を使用したコマンドライン引数の取得
Pythonでは、標準ライブラリであるsys
モジュールを使用して、コマンドライン引数を取得することができます。sys.argv
は、コマンドライン引数をリスト形式で格納している変数です。リストの最初の要素(sys.argv[0]
)は実行されるスクリプト名で、2番目以降の要素が引数として渡された値となります。
サンプルコード: 簡単な計算プログラム
import sys
def main():
if len(sys.argv) < 3:
print("エラー: 2つの引数が必要です")
return
num1 = float(sys.argv[1])
num2 = float(sys.argv[2])
print(f"合計: {num1 + num2}")
if __name__ == "__main__":
main()
上記のプログラムは、コマンドラインから渡された2つの数値を合計して表示します。実行例は以下の通りです。
$ python script.py 3 5
合計: 8.0
2. argparse
モジュールでの高度な引数処理
argparse
の基本
sys.argv
では基本的な引数の取得が可能ですが、引数の数が多くなったり、オプション引数やフラグ(--verbose
など)を使用する場合は、標準ライブラリであるargparse
モジュールが便利です。このモジュールを使うと、引数の解析や、エラーメッセージの自動生成が簡単に行えます。
引数の解析とパーサーの作成
argparse
を使うには、まず引数を解析するためのパーサーを作成します。次に、パーサーに引数の設定を行い、実際にコマンドライン引数を解析していきます。
サンプルコード: 基本的なargparse
の使い方
import argparse
def main():
parser = argparse.ArgumentParser(description='サンプルプログラムです')
parser.add_argument('arg1', help='最初の引数')
parser.add_argument('arg2', type=float, help='2番目の数値引数')
args = parser.parse_args()
print(f"arg1 = {args.arg1}")
print(f"arg2 = {args.arg2}")
if __name__ == "__main__":
main()
このプログラムでは、2つの引数を受け取ります。arg1
は文字列として、arg2
は数値として扱われ、解析後に出力されます。
$ python script.py test 5.5
arg1 = test
arg2 = 5.5
オプション引数とフラグの処理
argparse
の強力な機能として、オプション引数やフラグがあります。これにより、引数が指定された場合にのみ動作するコードを書いたり、詳細な出力(--verbose
フラグなど)を提供することが可能です。
サンプルコード: オプション引数とフラグの使用
import argparse
def main():
parser = argparse.ArgumentParser()
parser.add_argument('--verbose', action='store_true', help='詳細な出力を表示')
parser.add_argument('numbers', nargs='+', type=float, help='数値のリスト')
args = parser.parse_args()
total = sum(args.numbers)
if args.verbose:
print(f"計算詳細: {args.numbers} の合計は {total} です")
else:
print(f"合計: {total}")
if __name__ == "__main__":
main()
このプログラムでは、--verbose
というフラグが指定されると詳細な出力が行われ、指定されなければシンプルな結果が表示されます。
$ python script.py 1 2 3 --verbose
計算詳細: [1.0, 2.0, 3.0] の合計は 6.0 です
3. エラーハンドリングと引数の検証
引数の数と型の検証
コマンドライン引数を扱う際には、ユーザーが正しく引数を提供しない場合にエラーメッセージを表示し、プログラムの誤動作を防ぐことが重要です。引数の数や型が期待通りであるかを検証することで、プログラムの安定性を保つことができます。
サンプルコード: 引数の数と型の検証
import sys
def main():
if len(sys.argv) != 3:
print("エラー: 2つの引数が必要です")
return
try:
num1 = float(sys.argv[1])
num2 = float(sys.argv[2])
except ValueError:
print("エラー: 引数は数値でなければなりません")
return
print(f"合計: {num1 + num2}")
if __name__ == "__main__":
main()
このプログラムでは、引数の数が3つ(スクリプト名+2つの数値)でなければエラーメッセージを表示し、数値でない引数が渡された場合もエラーメッセージを表示します。
4. 実際のユースケースと応用
コマンドラインツールの作成例
コマンドライン引数を使った実用的な例として、ファイル操作やデータ処理を行うコマンドラインツールを作成することが考えられます。
サンプルコード: ファイルの内容をカウントするツール
import argparse
def main():
parser = argparse.ArgumentParser(description='ファイルの行数をカウントするツール')
parser.add_argument('filename', help='カウントするファイル名')
args = parser.parse_args()
try:
with open(args.filename, 'r') as file:
lines = file.readlines()
print(f"ファイル {args.filename} の行数: {len(lines)}")
except FileNotFoundError:
print(f"エラー: ファイル {args.filename} が見つかりません")
if __name__ == "__main__":
main()
このツールは、指定したファイルの行数をカウントして出力します。
$ python count_lines.py example.txt
ファイル example.txt の行数: 100
5. まとめ
Pythonでのコマンドライン引数の取り扱い方法を学ぶことで、プログラムに柔軟性を持たせることができます。sys.argv
を使ったシンプルな方法から、argparse
による複雑な引数処理まで、実際のニーズに応じて適切な手法を選択することが重要です。また、エラーハンドリングや引数の検証を取り入れることで、より堅牢なプログラムを作成することが可能です。