[Pythonのはじめ方] Part27: Pythonスクリプトの実行とコマンドライン引数

Python

はじめに

Pythonの学習が進んでくると、書いたコードをファイル(スクリプト)として保存し、実行したくなりますね。また、実行時に外部から情報を与えて、スクリプトの動作を変えたい場合も出てきます。それが「コマンドライン引数」です。

このステップでは、Pythonスクリプトの基本的な実行方法と、コマンドライン引数を使ってスクリプトに情報を渡す方法を学びます。これにより、より実用的で柔軟なプログラムを作成できるようになります!🚀

Pythonスクリプトの実行方法

Pythonスクリプト(拡張子が .py のファイル)を実行する最も基本的な方法は、ターミナル(WindowsではコマンドプロンプトやPowerShell、macOSやLinuxではターミナル)を使うことです。

まず、簡単なPythonスクリプトを作成しましょう。テキストエディタを開き、以下のコードを入力して、hello.py という名前で保存してください。(文字コードはUTF-8で保存するのが一般的です。)


# hello.py
print("Hello, Python スクリプト!")
    

次に、ターミナルを開き、hello.py を保存したディレクトリに移動します。(cd コマンドを使います。)

そして、以下のコマンドを実行します。


python hello.py
    

(環境によっては python3 コマンドを使用する必要があるかもしれません。)

実行すると、ターミナルに以下のように表示されるはずです。


Hello, Python スクリプト!
    

これで、Pythonスクリプトを実行できました!🎉 とても簡単ですね。

Tips: Visual Studio Codeなどの高機能なエディタやIDEには、エディタ内で直接スクリプトを実行する機能(実行ボタンなど)もあります。これも便利なので、使っているツールに合わせて試してみてください。

コマンドライン引数とは?

コマンドライン引数とは、スクリプトを実行する際に、スクリプト名の後ろに付けて渡す情報のことです。これにより、スクリプトの動作を外部から制御できます。

例えば、ファイル名を引数として渡して特定のファイルを処理させたり、設定値を渡して動作モードを切り替えたりするのに使われます。


python my_script.py argument1 argument2 --option value
# この場合、"argument1", "argument2", "--option", "value" がコマンドライン引数です。
    

`sys.argv` を使って引数を取得する

Pythonでコマンドライン引数を扱う最も基本的な方法は、標準ライブラリの `sys` モジュールにある `argv` を使うことです。

`sys.argv` は、コマンドライン引数を要素とするリストです。

  • `sys.argv[0]` : 実行したスクリプトのファイル名
  • `sys.argv[1]` : 最初の引数
  • `sys.argv[2]` : 2番目の引数

注意点: `sys.argv` の要素はすべて文字列型 (`str`) として格納されます。数値として扱いたい場合は、`int()` や `float()` を使って型変換する必要があります。

以下のサンプルコード `show_args.py` を見てみましょう。


# show_args.py
import sys

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

# 引数の数をチェック (スクリプト名自身も含むので1より大きいか)
if len(sys.argv) > 1:
    print(f"渡された引数の数: {len(sys.argv) - 1}")
    print("渡された引数:")
    # スクリプト名以降の引数を表示
    for i in range(1, len(sys.argv)):
        print(f"  引数{i}: {sys.argv[i]} (型: {type(sys.argv[i])})")
else:
    print("引数は渡されませんでした。")

    

このスクリプトをターミナルで実行してみます。


# 引数なしで実行
python show_args.py
# 出力:
# スクリプト名: show_args.py
# 引数は渡されませんでした。

# 引数を付けて実行
python show_args.py abc 123 --test
# 出力:
# スクリプト名: show_args.py
# 渡された引数の数: 3
# 渡された引数:
#   引数1: abc (型: <class 'str'>)
#   引数2: 123 (型: <class 'str'>)
#   引数3: --test (型: <class 'str'>)
    

このように `sys.argv` を使うと簡単に引数を取得できますが、引数の数が多かったり、オプション(`-f` や `–file` のような形式)を扱ったり、引数の意味を分かりやすくしたりするには少し不便です。🤔

注意: `sys.argv` で存在しないインデックス(例: 引数が1つしか渡されていないのに `sys.argv[2]` にアクセスする)にアクセスしようとすると `IndexError` が発生します。引数の数を `len(sys.argv)` でチェックしてからアクセスするようにしましょう。

`argparse` モジュールで高度な引数処理 ✨

より複雑なコマンドライン引数をスマートに扱うために、Pythonには `argparse` という強力な標準ライブラリが用意されています。

`argparse` を使うと、以下のようなメリットがあります。

  • 引数に名前を付けられる(位置引数、オプション引数)
  • 引数の型を指定できる(自動で型変換してくれる)
  • 引数のヘルプメッセージを自動生成してくれる (`-h` または `–help` オプション)
  • 引数にデフォルト値を設定できる
  • 引数が必須かどうかを指定できる
  • 引数の数を指定できる (`nargs`)

基本的な使い方を見てみましょう。名前 (`name`) と年齢 (`age`) を引数として受け取るスクリプト `greet.py` を作成します。


# greet.py
import argparse

# 1. ArgumentParserオブジェクトを作成
parser = argparse.ArgumentParser(description='名前と年齢を受け取って挨拶するスクリプト')

# 2. 引数を定義する
# 位置引数 'name' (必須)
parser.add_argument('name', type=str, help='あなたの名前')
# オプション引数 '--age' または '-a' (任意)
parser.add_argument('--age', '-a', type=int, default=20, help='あなたの年齢 (デフォルト: 20)')
# 真偽値フラグ '--verbose' または '-v' (任意)
parser.add_argument('--verbose', '-v', action='store_true', help='詳細な情報を表示する')

# 3. コマンドライン引数をパース(解析)する
args = parser.parse_args()

# 4. パースされた引数を使用する
print(f"こんにちは、{args.name}さん!")
print(f"あなたは {args.age} 歳ですね。")

if args.verbose:
    print("詳細表示モードが有効です。")
    print("受け取った引数オブジェクト:", args)

    

実行例を見てみましょう。


# ヘルプメッセージを表示 (-h オプション)
python greet.py -h
# 出力:
# usage: greet.py [-h] [--age AGE] [--verbose] name
#
# 名前と年齢を受け取って挨拶するスクリプト
#
# positional arguments:
#   name           あなたの名前
#
# options:
#   -h, --help     show this help message and exit
#   --age AGE, -a AGE
#                  あなたの年齢 (デフォルト: 20)
#   --verbose, -v  詳細な情報を表示する

# 必須引数 'name' だけを指定
python greet.py Alice
# 出力:
# こんにちは、Aliceさん!
# あなたは 20 歳ですね。

# 'name' とオプション '--age' を指定
python greet.py Bob --age 30
# 出力:
# こんにちは、Bobさん!
# あなたは 30 歳ですね。

# 短縮オプション '-a' と '-v' を使用
python greet.py Charlie -a 25 -v
# 出力:
# こんにちは、Charlieさん!
# あなたは 25 歳ですね。
# 詳細表示モードが有効です。
# 受け取った引数オブジェクト: Namespace(name='Charlie', age=25, verbose=True)

# 必須引数 'name' を指定しないとエラーになる
python greet.py --age 40
# 出力:
# usage: greet.py [-h] [--age AGE] [--verbose] name
# greet.py: error: the following arguments are required: name
    

`argparse` を使うことで、引数の扱いが非常に簡単かつ明確になりましたね!😊 スクリプトにコマンドラインインターフェースを付ける際には、積極的に活用しましょう。

まとめ

このステップでは、Pythonスクリプトを実行する基本的な方法と、コマンドライン引数を使ってスクリプトに情報を渡す方法を学びました。

  • スクリプトの実行はターミナルから `python スクリプト名.py` で行います。
  • 簡単な引数処理には `sys.argv` が使えますが、リストのインデックス管理や型変換に注意が必要です。
  • より高度で分かりやすい引数処理には `argparse` モジュールが非常に便利です。ヘルプメッセージの自動生成や型指定などの機能があります。

コマンドライン引数を使いこなせるようになると、作成するPythonプログラムの活用の幅が大きく広がります。ぜひ色々なスクリプトで試してみてください!

参考情報

コメント

タイトルとURLをコピーしました