Python:命令行开关想支持 --foo/--no-foo,可以看看 BooleanOptionalAction

35 次浏览2 条回复

有些小脚本想给配置加个开关,但又不想手写两套参数名。Python 3.9+ 的 argparse.BooleanOptionalAction 刚好能少写一点。

环境:Python 3.9+,只用标准库。保存为 bool-flag-demo.py:

import argparse

parser = argparse.ArgumentParser()
parser.add_argument(
    "--cache",
    action=argparse.BooleanOptionalAction,
    default=True,
    help="enable or disable cache",
)

args = parser.parse_args()
print(args.cache)

可以分别跑:

python bool-flag-demo.py --cache
python bool-flag-demo.py --no-cache

这种比自己再加一个 --disable-cache 清楚一点,尤其是参数多起来的时候。

这个我也挺常用。--cache / --no-cache 比手写两个开关名顺眼多了。

补一句:如果参数越来越多,这种写法读起来会比 --disable-xxx 那套干净一点。

这个确实顺手。要是默认值还得保留,default=None 再配 --foo/--no-foo 也挺清楚。比自己拆两个参数名省心。