🉐

「argparse」 × 「Shell Script」 でパラメータを変えながら Python を一括実行

に公開

今回は、パラメータを変えながら、プログラムを一括実行する方法についてまとめてみました。

『argparse』と『Shell Script』を用いることで、変数の値を変更しつつ、複数回実行することができます。

argparse の使い方

概要

argparse は Python 標準ライブラリで、実行時にコマンドライン引数を定義し、プログラム内の変数として扱うことができます。

実例紹介

まずは簡単な Python プログラムを用意しました(ファイル名:arg_1.py)。

arg_1.py
import argparse

def main():
    parser = argparse.ArgumentParser(description="ユーザー情報を表示するプログラム")
    parser.add_argument("--name", type=str, default="Sato", help="名前")
    parser.add_argument("--age", type=int, default=20, help="年齢")
    parser.add_argument("--country", type=str, default="Japan", help="出身国")
    args = parser.parse_args()

    print(f"name   : {args.name}")
    print(f"age    : {args.age}")
    print(f"country: {args.country}")
    print("_________________")

if __name__ == "__main__":
    main()
  1. 引数なしで実行するとデフォルト値が使われます。

    python arg_1.py
    
    name   : Sato
    age    : 20
    country: Japan
    __________________
    
  2. 引数を指定して実行すると、その値が出力されます。

    python arg_1.py --name Tanaka --age 56 --country USA
    
    name   : Tanaka
    age    : 56
    country: USA
    __________________
    

Shell Script の使い方

概要

Shell Script は複数のコマンドをまとめて自動で実行できるスクリプトです。
Linux や macOS のターミナルで使われ、拡張子は通常「.sh」を付けます。

実例紹介

以下のスクリプト(ファイル名:run_1.sh)で、先ほどの arg_1.py と別のプログラム arg_2.py を連続実行します。

run_1.sh
#!/usr/bin/env bash

python arg_1.py --name "Sato" --age 20 --country "Japan"
python arg_2.py --name "Alex" --age 18 --country "USA"
arg_2.py
import argparse

def main():
    parser = argparse.ArgumentParser(description="ユーザー情報を表示するプログラム(第二版)")
    parser.add_argument("--name", type=str, default="Sato", help="名前")
    parser.add_argument("--age", type=int, default=20, help="年齢")
    parser.add_argument("--country", type=str, default="Japan", help="出身国")
    args = parser.parse_args()

    print(f"name   : {args.name}")
    print(f"age    : {args.age}")
    print(f"country: {args.country}")
    print("_________________")

if __name__ == "__main__":
    main()

実行方法は以下の通りです。

bash run_1.sh
name   : Sato
age    : 20
country: Japan
_________________
name   : Alex
age    : 18
country: USA
_________________

Shell Script の for 文

概要

Shell Script では for 文を使って繰り返し処理が可能です。
これにより、同じコマンドを何度も書く必要がなくなります。

実例紹介

以下のスクリプト(ファイル名:run_2.sh)は、名前・年齢・国の組み合わせをすべて試して実行します。

run_2.sh
#!/usr/bin/env bash

names=("Taro" "Alex")
ages=(18 20)
countries=("Japan" "USA")

for name in "${names[@]}"; do
  for age in "${ages[@]}"; do
    for country in "${countries[@]}"; do
      python arg_1.py --name "$name" --age "$age" --country "$country"
    done
  done
done

実行してみます。

bash run_2.sh
name: Taro
age: 18
country: Japan
_________________
name: Taro
age: 18
country: USA
_________________
name: Taro
age: 20
country: Japan
_________________
name: Taro
age: 20
country: USA
_________________
name: Alex
age: 18
country: Japan
_________________
name: Alex
age: 18
country: USA
_________________
name: Alex
age: 20
country: Japan
_________________
name: Alex
age: 20
country: USA
_________________

これで 2×2×2 の合計 8 通りが自動で実行されます。

おわりに

今回は argparseShell Script を組み合わせて、プログラムを自動で複数回実行する方法を解説しました。
引数の設定方法やスクリプトの書き方が整理できたかと思います。今後もプログラミングや機械学習の内容を勉強しながら記事を書いていくつもりです。

最後までお読みいただき、ありがとうございました!

Discussion