简单介绍
argparse
模块是Python标准库中的一个命令行解析模块,可以解析命令行参数,并生成帮助信息。
应用场景
它可以用于许多不同的项目和业务场景中,以下是一些常见的应用场景:
-
命令行工具:如果你正在编写一个命令行工具,可以使用
argparse
模块解析命令行参数,以便用户可以通过命令行界面控制工具的行为和输出。 -
数据处理:如果你正在处理数据,可以使用
argparse
模块接受数据文件的路径、输出文件的路径、数据处理方式等参数,以便用户可以通过命令行界面控制数据处理的方式和输出结果。 -
网络编程:如果你正在编写一个网络应用程序,可以使用
argparse
模块接受服务器地址、端口号等参数,以便用户可以通过命令行界面指定服务器地址和端口号。 -
自动化脚本:如果你正在编写一个自动化脚本,可以使用
argparse
模块接受需要自动化的任务、输入文件路径、输出文件路径等参数,以便用户可以通过命令行界面控制脚本的行为和输出。
场景举例
日常场景一
启动Python项目时通过传入--env参数来选择不同的配置文件。
可以在代码中定义多个配置文件,然后使用argparse模块解析--env参数,并根据参数值选择相应的配置文件。
以下演示如何使用argparse模块解析命令行参数,并根据--env参数选择相应的配置文件在项目根目录下创建不同的配置文件,如config_dev.ini、config_prod.ini等。每个配置文件中保存相应环境的配置信息,如IP地址、端口号、数据库连接等。配置文件通常使用INI格式,如下所示:
[server]
host = 127.0.0.1
port = 8080
[database]
host = 127.0.0.1
port = 3306
user = root
password = 123456
database = mydb
import argparse
import configparser
# 解析命令行参数
parser = argparse.ArgumentParser()
parser.add_argument('--env', default='dev', help='the environment to use')
args = parser.parse_args()
# 读取配置文件
config = configparser.ConfigParser()
config.read(f'config_{args.env}.ini')
# 获取配置信息
server_host = config.get('server', 'host')
server_port = config.getint('server', 'port')
database_host = config.get('database', 'host')
database_port = config.getint('database', 'port')
database_user = config.get('database', 'user')
database_password = config.get('database', 'password')
database_name = config.get('database', 'database')
日常场景二
自动化脚本
自动化的脚本,主要有一些UI自动化测试、接口自动化、性能测试、定时任务等的脚本。这些脚本需要根据不同的参数触发不同的功能,是非常常用的场景。比如以下的网易Airtest UI自动化框架,除了支持界面的操作,在脚本自动化部署时则会使用到命令行脚本。
命令行运行脚本 - Airtest Project Docs
日常场景三
深度学习模型
在大部分的模型代码中都会有如下的设计,在入口通过接收模型的参数和超参数进行模型训练。通常是像模型的文件路径、学习率、图片大小等这样的参数,通过改变参数从而使模型达到更好的效果。这在调参这一步中很常用。
def main():
parser = argparse.ArgumentParser()
# Required parameters
parser.add_argument("--name", required=True,
help="Name of this run. Used for monitoring.")
parser.add_argument("--dataset", choices=["cifar10", "cifar100"], default="cifar10",
help="Which downstream task.")
parser.add_argument("--model_type", choices=["ViT-B_16", "ViT-B_32", "ViT-L_16",
"ViT-L_32", "ViT-H_14", "R50-ViT-B_16"],
default="ViT-B_16",
help="Which variant to use.")
parser.add_argument("--pretrained_dir", type=str, default="checkpoint/ViT-B_16.npz",
help="Where to search for pretrained ViT models.")
parser.add_argument("--output_dir", default="output", type=str,
help="The output directory where checkpoints will be written.")
parser.add_argument("--img_size", default=224, type=int,
help="Resolution size")
parser.add_argument("--train_batch_size", default=16, type=int,
help="Total batch size for training.")
parser.add_argument("--eval_batch_size", default=64, type=int,
help="Total batch size for eval.")
parser.add_argument("--eval_every", default=100, type=int,
help="Run prediction on validation set every so many steps."
"Will always run one evaluation at the end of training.")
parser.add_argument("--learning_rate", default=3e-2, type=float,
help="The initial learning rate for SGD.")
parser.add_argument("--weight_decay", default=0, type=float,
help="Weight deay if we apply some.")
parser.add_argument("--num_steps", default=10000, type=int,
help="Total number of training epochs to perform.")
parser.add_argument("--decay_type", choices=["cosine", "linear"], default="cosine",
help="How to decay the learning rate.")
parser.add_argument("--warmup_steps", default=500, type=int,
help="Step of training to perform learning rate warmup for.")
parser.add_argument("--max_grad_norm", default=1.0, type=float,
help="Max gradient norm.")
parser.add_argument("--local_rank", type=int, default=-1,
help="local_rank for distributed training on gpus")
parser.add_argument('--seed', type=int, default=42,
help="random seed for initialization")
parser.add_argument('--gradient_accumulation_steps', type=int, default=1,
help="Number of updates steps to accumulate before performing a backward/update pass.")
parser.add_argument('--fp16', action='store_true',
help="Whether to use 16-bit float precision instead of 32-bit")
parser.add_argument('--fp16_opt_level', type=str, default='O2',
help="For fp16: Apex AMP optimization level selected in ['O0', 'O1', 'O2', and 'O3']."
"See details at https://nvidia.github.io/apex/amp.html")
parser.add_argument('--loss_scale', type=float, default=0,
help="Loss scaling to improve fp16 numeric stability. Only used when fp16 set to True.\n"
"0 (default value): dynamic loss scaling.\n"
"Positive power of 2: static loss scaling value.\n")
args = parser.parse_args()