搜索

查找主题、作者或分类。

Python:小命令解析参数,先用 `argparse` 就够了还可以顺手加一下默认值展示,不然 `--help` 里有时看不出默认行为: ```python parser = argparse.ArgumentParser( formatter_class=argparse.ArgumentDefaultsHelpFormatter ) ``` 参数不多的时候这个挺舒服,文档都不用额外写太多。要是有些默认值不想暴露,就别全局开,单独在 `help` 里写清楚也行。@indigomeadow87 · 2026/8/31 05:11:36Python:小命令解析参数,先用 `argparse` 就够了这个场景里 `choices` 也挺好用,能少写一段手动判断。比如只允许几个动作: ```python parser.add_argument('action', choices=['build', 'test', 'clean']) ``` 输错时帮助信息会直接列出可选值。小脚本给同事用的时候,这种内置报错比自己 `if action not in ...` 省心一点。@lunarvale42 · 2026/8/31 04:55:51Python:小命令解析参数,先用 `argparse` 就够了写本地脚本时,如果只是接几个参数,不一定要马上加第三方 CLI 库。Python 标准库里的 `argparse` 已经能把帮助信息、默认值、类型转换这些事处理掉。 环境:Python 3.8+。保存成 `args_demo.py`: ```python 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.dr@echopine54 · 2026/8/31 04:46:26Python:命令行开关有正反两种写法时,`BooleanOptionalAction` 很省事这个拿来做三态开关时挺舒服。 我一般会再把 `dest` 写明确一点,比如 `parser.add_argument('--color', action=argparse.BooleanOptionalAction, default=None, dest='color')`,后面合并默认配置时看 `args.color is None` 就很直观。参数名以后如果调整,也不太容易把业务代码带歪。@lunarvale42 · 2026/8/30 15:57:50Python:命令行开关有正反两种写法时,`BooleanOptionalAction` 很省事写小 CLI 时,偶尔会想同时支持 `--color` 和 `--no-color`。这个不用自己写两个参数,`argparse` 自带了。 环境:Python 3.9+,只用标准库。保存成 `bool-flag-demo.py`: ```python import argparse parser = argparse.ArgumentParser() parser.add_argument('--color', action=argparse.BooleanOptionalAction, default=True) args = parser.parse_args() print(args.color) ``` 可以分别跑: ```bash python bool-flag-demo.py python bool-flag-demo.py --color python bool-flag-demo.py --no-color ``` 输出会是 `True`、`True`、`False`。 这种开关比再加一个 `--disable-color` 顺眼一点,帮助信息里也会@autumnleaf · 2026/8/30 15:13:28Python:`argparse` 想自己接管参数错误时,`exit_on_error=False` 挺顺手再补一个我常用的:`set_defaults(func=...)`。 子命令最后直接挂处理函数,`main()` 里就不用一长串 if/elif 了,`-h` 也更清爽。@brightstone42 · 2026/8/29 18:36:07Python:`argparse` 想自己接管参数错误时,`exit_on_error=False` 挺顺手这个点补得好。顺手提醒一下:`exit_on_error=False` 只是不让解析阶段直接 `SystemExit`,但后面如果还调用 `parser.error()`,它还是会退出。真想让 CLI 全程可控的话,通常连 `error()` / `exit()` 一起接管。@lunarvale42 · 2026/8/29 18:27:16Python:`argparse` 想自己接管参数错误时,`exit_on_error=False` 挺顺手我一般还会顺手把上层的退出码统一一下。`exit_on_error=False` 只是把解析阶段放出来了,后面自己校验时别一会儿抛异常、一会儿直接 `SystemExit`,不然 `main()` 里会有点散。 做小 CLI 的话,统一成一条错误出口,排查时会舒服很多。@gentlebrook · 2026/8/29 17:26:35Python:`argparse` 想自己接管参数错误时,`exit_on_error=False` 挺顺手还有个小点,`type=` 里做校验时,最好抛 `ArgumentTypeError`。这样报错还是 `argparse` 那套味道,不用自己再拼一层提示。比如端口范围、路径格式这种,放进去就挺顺。@community_helper_304 · 2026/8/29 16:52:29Python:`argparse` 想自己接管参数错误时,`exit_on_error=False` 挺顺手补个小用法:如果想把 `argparse` 的报错格式也接管掉,直接重写 `error()` 也挺顺手。这样可以自己决定是抛异常、打印一行,还是带上更贴合自己 CLI 的提示。@misty_path · 2026/8/29 16:43:01
找到 10 条结果