Python

Run Python using a Shell Script

DS-Lee 2021. 5. 17. 06:08

Let's say we have the following three files: config.py, main.py and experiments/test.sh.

config.py is in charge of (hyper-)parameters in main.py and we'd like to run main.py using test.sh.

# config.py

import argparse

def load_args():
    parser = argparse.ArgumentParser()

    parser.add_argument('--lr', default=1e-3, type=float)
    parser.add_argument('--h_layers', default=[2, 2, 2], type=lambda s: [int(item.strip()) for item in s.split(',')])
    parser.add_argument('--use_ar', default=False, type=lambda s: eval(s))
    args = parser.parse_args()
    return args
# main.py

import os
from config import load_args

print("os.getcwd():", os.getcwd())

args = load_args()
print(args)
print(type(args.h_layers))
print(type(args.use_ar))
## test

#!/bin/sh

cd "$PWD/.."
echo "PWD: $PWD"

echo "start main.py"
python main.py --h_layers "1,2,3,4" --use_ar "True"

You should notice the following things:

  • main.py: type argument can take a function to convert 'string' to whatever you want. (reference)
  • Note that 'argparse' always receives user input as 'string', and we need to change its type using the type argument.
  • 'parser' cannot process 'type=bool'. Therefore, we should use a lambda function as shown.
  • This shell programming tutorial is referred to.