Pythonのargparseモジュールを使用してコマンドライン引数を扱う際、bool型のフラグをどのように扱うかは一見すると直感的ではありません。以下に、この問題を解決するための方法を示します。
bool型のフラグの問題点
Pythonのargparseモジュールでbool型のフラグを扱う際の一般的な方法は、type=bool
と指定することです。しかし、これには問題があります。例えば、次のようなコードを考えてみましょう。
import argparse
def get_args():
parser = argparse.ArgumentParser()
parser.add_argument("--hogeFlag", type=bool, default=True)
return parser.parse_args()
args = get_args()
print(args.hogeFlag)
このコードをpython test.py --hogeFlag False
と実行すると、期待通りにFalse
が出力されると思いきや、実際にはTrue
が出力されます。これは、type=bool
と指定すると、Pythonは設定された引数をbool()
に入れてbool型に変換しようとするためです。
解決策
この問題を解決するための一つの方法は、action='store_true'
またはaction='store_false'
を使用することです。これにより、フラグが指定された場合にはTrue
が、指定されなかった場合にはFalse
が設定されます。以下に、この方法を使用したコードを示します。
import argparse
def get_args():
parser = argparse.ArgumentParser()
parser.add_argument("--hogeFlag", action='store_true')
return parser.parse_args()
args = get_args()
print(args.hogeFlag)
このコードをpython test.py --hogeFlag
と実行すると、True
が出力され、python test.py
と実行すると、False
が出力されます。
まとめ
Pythonのargparseモジュールでbool型のフラグを扱う際は、type=bool
ではなくaction='store_true'
またはaction='store_false'
を使用することをお勧めします。これにより、直感的な挙動を得ることができます。