Python:小命令解析参数,先用 `argparse` 就够了

15 次浏览2 条回复

写本地脚本时,如果只是接几个参数,不一定要马上加第三方 CLI 库。Python 标准库里的 argparse 已经能把帮助信息、默认值、类型转换这些事处理掉。

环境:Python 3.8+。保存成 args_demo.py

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('input')
parser.add_argument('-n', '--name', default='mesh')
parser.add_argument('--count', type=int, default=1)
parser.add_argument('--dry-run', action='store_true')

args = parser.parse_args()

print(args)
for i in range(args.count):
    print(f'{i + 1}: {args.name} -> {args.input}')

if args.dry_run:
    print('只是预览,不做写入')

跑一下:

python args_demo.py data.txt --name dev --count 2 --dry-run
python args_demo.py --help

type=int 这种小转换挺省心,参数错了也会直接给出提示。要是后面要做很多子命令、彩色输出、交互提示,再考虑 Typer、Click 之类的会更舒服。

这个场景里 choices 也挺好用,能少写一段手动判断。比如只允许几个动作:

parser.add_argument('action', choices=['build', 'test', 'clean'])

输错时帮助信息会直接列出可选值。小脚本给同事用的时候,这种内置报错比自己 if action not in ... 省心一点。

还可以顺手加一下默认值展示,不然 --help 里有时看不出默认行为:

parser = argparse.ArgumentParser(
    formatter_class=argparse.ArgumentDefaultsHelpFormatter
)

参数不多的时候这个挺舒服,文档都不用额外写太多。要是有些默认值不想暴露,就别全局开,单独在 help 里写清楚也行。