Python 编程必备技能:argparse模块的使用

简单介绍

argparse模块是Python标准库中的一个命令行解析模块,可以解析命令行参数,并生成帮助信息。

应用场景

它可以用于许多不同的项目和业务场景中,以下是一些常见的应用场景:

  1. 命令行工具:如果你正在编写一个命令行工具,可以使用argparse模块解析命令行参数,以便用户可以通过命令行界面控制工具的行为和输出。

  2. 数据处理:如果你正在处理数据,可以使用argparse模块接受数据文件的路径、输出文件的路径、数据处理方式等参数,以便用户可以通过命令行界面控制数据处理的方式和输出结果。

  3. 网络编程:如果你正在编写一个网络应用程序,可以使用argparse模块接受服务器地址、端口号等参数,以便用户可以通过命令行界面指定服务器地址和端口号。

  4. 自动化脚本:如果你正在编写一个自动化脚本,可以使用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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值