argparse 是 Python 标准库中用于解析命令行参数 的模块,ArgumentParser 是其核心类,用于定义和解析命令行接口。
使用示例
在arg.py脚本中定义
python
import argparse
# 创建解析器
parser = argparse.ArgumentParser(description="训练脚本")
# 添加参数
parser.add_argument("--epochs", type=int, default=10, help="训练轮数")
parser.add_argument("--lr", type=float, default=0.001, help="学习率")
# 解析参数
args = parser.parse_args()
# 使用参数
print(f"训练 {args.epochs} 轮,学习率 {args.lr}")
然后运行这个脚本的时候,就可以读取命令里的参数了
bash
python arg.py --epochs 20 --lr 0.01
add_argument函数
这里重点讲一下这个函数,下面是这个函数的参数讲解
| 参数 | 说明 | 示例 |
|---|---|---|
name |
参数名(-- 开头为可选,否则为必需) |
"--epochs", "input_file" |
type |
参数类型转换 | int, float, str, bool |
default |
默认值,不管命令里带不带都会被赋值 | 10, 0.001, "cpu" |
help |
帮助信息,也就是注释 | "训练轮数" |
required |
是否必需(仅对可选参数有效) | True/False |
choices |
如果是可选值的话,对应的可选值列表 | ["cpu", "cuda", "mps"] |
nargs |
参数个数 | "+", "*", 2, 3 |
action |
特殊动作 | "store_true", "append", "count" |
dest |
存储的目标属性名 | "num_epochs" |
action参数项
| Action | 说明 | 典型用途 |
|---|---|---|
store |
存储参数值(默认) | 普通参数 |
store_const |
存储const指定的常量 |
固定值选项 |
store_true |
存储 True |
布尔开关 |
store_false |
存储 False |
布尔开关 |
append |
将值添加到列表 | 多次指定参数 |
append_const |
将 const 常量添加到列表 |
累积固定值 |
count |
计数参数出现次数 | 详细程度 -v |
help |
显示帮助并退出 | 自动添加 |
version |
显示版本并退出 | 版本信息 |
extend |
扩展列表(Python 3.8+) | 合并多个列表值 |
1、store_const
python
parser.add_argument("--mode", action="store_const", const=42)
bash
$ python script.py --mode
42
一般与default进行配合使用
python
parser.add_argument("--log", action="store_const", const="DEBUG", default="INFO")
bash
$ python script.py
INFO
$ python script.py --log
DEBUG
2、store_true与store_false
一般用于布尔开关
python
parser.add_argument("--verbose", action="store_true")
bash
$ python script.py
Verbose: False
$ python script.py --verbose
Verbose: True
使用type进行布尔开关一般是错的
python
parser.add_argument("--use-cuda", type=bool, default=True)
因为本质上,Python 中 bool("False") 的结果是 True(因为非空字符串都为真)。 命令行传入的参数都是字符串,所以:
--use-cuda False→args.use_cuda是True(字符串 "False" 转为 bool 为真)--use-cuda True→args.use_cuda是True
3、append
python
parser.add_argument("--file", action="append")
bash
$ python script.py --file a.txt --file b.txt --file c.txt
['a.txt', 'b.txt', 'c.txt']
4、count
python
parser.add_argument("-v", "--verbose", action="count", default=0)
bash
$ python script.py
Verbose level: 0
$ python script.py -v
Verbose level: 1
$ python script.py -vv
Verbose level: 2
$ python script.py -vvv
Verbose level: 3
一般用于
python
if args.verbose == 0:
log_level = "WARNING"
elif args.verbose == 1:
log_level = "INFO"
else:
log_level = "DEBUG"
5、help
python
parser.add_argument("--help-custom", action="help")
# 通常不需要手动添加,ArgumentParser 会自动添加 -h/--help
bash
$ python script.py --help-custom
# 显示帮助并退出
6、extend
python
parser.add_argument("--nums", action="extend", nargs="+", type=int)
bash
$ python script.py --nums 1 2 --nums 3 4
[1, 2, 3, 4]
# 对比 append:
# $ python script.py --nums 1 2 --nums 3 4
# [[1, 2], [3, 4]]