文章目录
- 一、argparse模块
- (1)创建命令行解析对象:parser = argparse.ArgumentParser()
- (2)添加命令行参数和选项:parser.add_argument()
- (3)解析命令行参数:args = parser.parse_args()
- (4)获取命令行参数:epochs = args.epochs
- 二、项目实战
一、argparse模块
argparse 是 Python 标准库中用于解析命令行参数的模块。提供了一种简单而灵活的方式来处理命令行输入,并帮助用户构建具有参数选项和帮助信息的命令行界面。
argparse 模块的主要组成部分:
- (1)
创建 ArgumentParser 对象:用于创建命令行解析器对象。
如:定义程序可以接受的命令行参数,并设置参数的名称、类型、默认值和帮助信息等。- (2)
使用 add_argument() 方法:向解析器中添加命令行参数及其相关的属性
。如参数名称、缩写、类型、默认值、帮助信息等。- (3)
调用 parse_args() 方法:解析命令行参数,该方法会返回一个命名空间对象,其包含了解析后的参数及其对应的值。
该方法会自动根据定义的参数规则解析命令行输入,并将参数值存储在命名空间对象中供程序使用。- (4)
使用命名空间对象中的属性,获取命令行参数的值
。
以上四步最难的是 add_argument() 方法,因为它有好多参数,且刚开始不太容易理解 。
import argparse # 导入argparse模块
if __name__ == "__main__":
parser = argparse.ArgumentParser() # 创建命令行解析对象
parser.add_argument('--epochs', default="1") # 添加命令行参数和选项
args = parser.parse_args() # 解析命令行参数
epochs = args.epochs # 获取命令行参数
print("epochs =", epochs) # 输出结果:epochs = 1
(1)创建命令行解析对象:parser = argparse.ArgumentParser()
"""####################################################################################################################
# 函数功能:用于创建一个命令行参数解析器的对象。
# 函数说明:argparse.ArgumentParser([prog=None, usage=None, description=None, epilog=None,
# formatter_class=argparse.HelpFormatter, prefix_chars='-',
# fromfile_prefix_chars=None, argument_default=None,
# conflict_handler='error', add_help=True, allow_abbrev=True])
# 参数说明:
# - prog: 程序的名称
# - usage: 用法说明
# - description: 描述参数作用的文字
# - epilog: 描述参数作用的结尾文字
# - formatter_class: 自定义帮助信息输出格式
# - prefix_chars: 用于标识可选参数的前缀字符
# - fromfile_prefix_chars: 用于从文件中读取参数的前缀字符
# - argument_default: 参数的默认值
# - conflict_handler: 解决参数冲突的方式
# - add_help: 是否自动添加'-h'和'--help'选项来显示帮助信息
# - allow_abbrev: 是否允许参数缩写
####################################################################################################################"""
(2)添加命令行参数和选项:parser.add_argument()
python argparse模块的各参数解析和使用
"""####################################################################################################################
# 函数功能:向命令行参数解析器中添加命令行参数。
# 函数说明:parser.add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])
# 参数说明:
- name or flags: 命令行参数的名称或标志,可以是一个字符串或一个包含多个字符串的列表。例如 foo 或 -f, --foo。
(1)位置参数: 直接输入一个字符串,代表位置参数,是必传值。
(2)命令标志: 在字符串前加一个短横线(-),在命令中表示该参数。
(3)可选参数: 在字符串前加两个短横线(--),在命令行中代表可选参数,可输入也可不输入。
- action: 指定命令行参数的动作,默认为'store'。将命令行参数值存储到相应的参数名中。
(1)'store':存储参数值。
(2)'store_const':存储常量值。
(3)'store_true':存储True值。
(4)'store_false':存储False值。
(5)'append':将参数值添加到列表中。
(6)'append_const':将常量值添加到列表中。
(7)'count':计算参数出现的次数,存储到参数名中。
(8)'help':显示帮助信息并退出。
- nargs: 命令行参数的数量,默认为None。
- const: 常量值,用于一些特殊的动作,默认为None。
- default: 命令行参数的默认值,默认为None。
- type: 命令行参数的数据类型,默认为None。
(1)int:整数。
(2)float:浮点数。
(3)str:字符串。
(4)bool:布尔值。
- choices: 命令行参数允许的值的列表,默认为None。
- required: 命令行参数是否为必选,默认为False。
- help: 命令行参数的帮助文本,默认为None。
- metavar: 命令行参数在帮助文本中的名称,默认为None。
- dest: 命令行参数存储在解析结果中的属性名称,默认为None。
(1)默认情况下,参数名称与属性名称相同。
(2)若指定dest,则使用dest指定的参数名称作为属性名称。
####################################################################################################################"""
(3)解析命令行参数:args = parser.parse_args()
- 函数功能:根据 parser.add_argument() 添加的参数信息,来解析命令行参数。
- 输出参数:返回一个命名空间对象,其中包含了解析后的参数及其对应的值。
(4)获取命令行参数:epochs = args.epochs
- 代码功能:通过命名空间对象访问相应的属性,以获取参数的值。
- 代码详解:通过 args.epochs 获取了命令行参数 --epochs 的值,并将其赋值给了变量 epochs。然后可以使用 epochs 变量来访问参数值,以完成后续的操作。
二、项目实战
使用命令行指令调用脚本:python main_11.py --model /path/to/model.cfg --weights /path/to/weights.weights --data /path/to/data.data
import argparse
parser = argparse.ArgumentParser(description="Evaluate validation data.")
parser.add_argument("-m", "--model", type=str, default="../model/yolo_v3.cfg", help="Path to model")
parser.add_argument("-w", "--weights", type=str, default="../weights/yolo_v3.weights", help="Path to weights")
parser.add_argument("-d", "--data", dest='Data', type=str, default="../data/coco.data", help="Path to data")
args = parser.parse_args()
print(f"arguments: {args}")
print(f"model = {args.model}")
print(f"weights = {args.weights}")
print(f"data = {args.Data}") # 由于指定了dest,故命令行参数 --data 被解析后存储在dest指定的参数名称 args.Data 中。
"""
arguments: Namespace(model='../model/yolo_v3.cfg', weights='../weights/yolo_v3.weights', Data='../data/coco.data')
model = ../model/yolo_v3.cfg
weights = ../weights/yolo_v3.weights
data = ../data/coco.data
"""
# "../model/yolo_v3.cfg" :表示文件位于当前工作目录的父目录的 model 子目录中,文件名为 yolo_v3.cfg。
# "./model/yolo_v3.cfg" :表示文件位于当前工作目录的 model 子目录中,文件名为 yolo_v3.cfg。
# "/model/yolo_v3.cfg" :表示文件位于根目录的 model 子目录中,文件名为 yolo_v3.cfg。