python 使用argparse为程序添加参数

在之前的代码中,我一般都是用sys包来接受系统输入,然后自己写对应的函数判断,发现其实有argparse可以很方便的完成构造参数输入的工作:

"""
Filename: args.py
用于设置参数以及默认值
"""
import argparse


def get_args():
    """
    设置运行参数
    """
    parser = argparse.ArgumentParser(description='MalConv')
    parser.add_argument('--train_dir', default='./datas/train',
                        help='dir of train samples')
    parser.add_argument('--test_dir', default='./datas/test',
                        help='dir of test samples')
    parser.add_argument('--label_dict', default="./datas/label_dict.json", help='path to label dict')
    parser.add_argument('--batch_size', type=int, default=8, help='input batch size')
    parser.add_argument('--model', default=None, help='path of model loaded')
    parser.add_argument('--epoch', type=int, default=1, help='training epoch num')
    parser.add_argument('--lr', type=float, default=0.0001, help='learning rate, default=0.0001')
    parser.add_argument('--ckpt_dir', default="./checkpoint", help='path to pretrained ckpt model file')
    parser.add_argument('--output_file', default="result.txt", help='output result path')
    parser.add_argument('--seed', type=int, default=1, help='random seed')
    parser.add_argument('--device_target', default='CPU', help='device target')
    parser.add_argument('--mode', default="graph", help="'graph' or 'pynative'")
    parser.add_argument('--device_num', type=int, default=1)
    parser.add_argument('--device_id', type=int, default=0)
    parser.add_argument('--rank_id', type=int, default=0)

    args_opt = parser.parse_args()
    return args_opt

注意小数,布尔,整数类型的要加上type来限制类型,不然会被识别为字符串

使用的时候也很方便,直接使用对应的变量名即可调用

from args import get_args
args_opt=get_args()
seed=args_opt.seed

如果希望不用–来指定参数名,而是希望直接通过输入参数的顺序直接映射属性,比如
python args.py --seed 4 --rank_id 5 变成 python args.py 4 5 这样的,需要用到dest这个属性,同时省掉开始的–选项:
parser.add_argument(default=4,
help='seed,dest=‘seed’)
parser.add_argument(default=5,
help=‘rank_id’,dest=‘rank_id’)

实际测试中遇到两个报错:
unrecognized arguments和missing arguments
前置是因为使用位置来定义映射参数的时候,遇到了多个参数,超出了原来定义的个数,后者是因为输入的参数少了,没有达到定义的个数,解决方法,通过
args_opt, _ = parser.parse_known_args()用一个空变量接受多余的参数,然后加上 nargs='?'来让参数变为可选项,同时赋予默认值,这样少参数多参数都不会报错。
表示设置参数个数
nargs=‘*’: 表示参数可设置零个或多个
nargs=‘+’:表示参数可设置一个或多个
nargs=‘?’: 表示参数可设置零个或一个

修改后如下:

import argparse


def get_args():
    """
    设置运行参数
    """
    parser = argparse.ArgumentParser(description='PcapFisher')
    parser.add_argument(default='',
                        help='1st argument:pcap file path', dest='pcap_file',nargs='?')
    parser.add_argument(default='',
                        help='2nd argument:tls key path', dest='master_key_path', nargs='?')
    parser.add_argument(default='',
                        help='3rd argument:output file path', dest='output_file_path', nargs='?')
    parser.add_argument(default='',
                        help='4th argument:output dir of cert', dest='cert_dir', nargs='?')
    parser.add_argument(default='',
                        help='5th argument:output path of cert infor', dest='cert_info_path', nargs='?')
    parser.add_argument(default='',
                        help='6th argument:output path of pcap file with tls key', dest='with_key_pcap_path', nargs='?')
    parser.add_argument(default='',
                        help="7th argument:output path of pcap's statistical infor", dest='count_file_path', nargs='?')
    args_opt, _ = parser.parse_known_args()
    return args_opt

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值