🉐
「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()
-
引数なしで実行するとデフォルト値が使われます。
python arg_1.py
name : Sato age : 20 country: Japan __________________
-
引数を指定して実行すると、その値が出力されます。
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 通りが自動で実行されます。
おわりに
今回は argparse と Shell Script を組み合わせて、プログラムを自動で複数回実行する方法を解説しました。
引数の設定方法やスクリプトの書き方が整理できたかと思います。今後もプログラミングや機械学習の内容を勉強しながら記事を書いていくつもりです。
最後までお読みいただき、ありがとうございました!
Discussion