Python argparse 解析

       argparse 模块是 Python 内置的用于命令项选项与参数解析的模块,argparse 模块可以让人轻松编写用户友好的命令行接口,能够帮助我们轻松为模型定义(输入)参数,具体可能包含: 文件路径、操作选项、配置参数设置等。

使用步骤:

导入模块import argparse
创建解析对象parser=argparse.ArgumentParser(~)
命令行添加配置选项和参数parser.add_argument(~)
参数解析使用args=parser.parse_args

案例:

    当前作者的相关信息,包括年龄,名字等,具体实现代码如下:


'''
------
<2024-11-10 16:31>
Copyright (c) 2018-2024 the @MMiL, all rights reserved.
--* disclaimer:
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of..
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
---------------
'''

# <Parse.py>

import  argparse
# 创建一个Parser命令行参数解释器
parser=argparse.ArgumentParser(description="this is a argparser demo eg.")

# 1st:创建参数Parer
parser.add_argument('-n',"--name",type=str,choices=["MMiL","XiaoMing"],default="MMiL",help="作者的姓名")  # 可选参数
parser.add_argument('-a','--age', type=int,required=False, help="作者的年龄")                             # 位置(必选参数)
parser.add_argument("Uni", type=str, default="SocialUniversity",help="作者毕业的学校")
parser.add_argument('-s','--ShowFlag',action="store_true",required=False,default=False,help="年龄输出开关")
# 2nd:添加互斥参数组[para1,para2,para3] 互斥
parasGroup=parser.add_mutually_exclusive_group()
parasGroup.add_argument("--para1",type=int,default=None,help="第1个计算参数")
parasGroup.add_argument("--para2",type=int,default=None,help="第2个计算参数")
parasGroup.add_argument("--para3",type=int,default=None,help="第2个计算参数")
# 3rd:接受一个列表参数
parser.add_argument('--LIST', type=int, nargs='+',default=[12,32,23],required=False, help='a string of nums')

#解析参数 
args=parser.parse_args()
print("\n\targs参数表:",args)

# ------------------------------------------------------------
#  公共信息
print(f"\n\tname= {args.name}")
print(f"\n\tUni= {args.Uni}")

# 1st 根据指令判断是否输出作者的年龄
if args.ShowFlag:
    print(f"\n\tage= {args.age}\n")
else:
    print("\n\t当前不能输出作者的年龄\n")
    
# 2nd 互斥参数组的输出信息
print("\n\t互斥参数组的输出信息:")
if args.para1:
    print(f"\tpara1= {args.para1}\n")
elif args.para2:
    print(f"\tpara2= {args.para2}\n")
elif args.para3:
    print(f"\tpara3= {args.para3}\n")
    
# 3rd 接受多输入参数 eg.一个列表
print(f"\n\t列表的信息是:{args.LIST}")

常见的点说明:

1. "--age" [eg.] 代表age是一个可选参数, 如果命令行没有输入,则输出默认值"default=18",没有设置默认值则输出"age=None"

2. "Uni" [eg.] 代表Uni是一个位置参数, 命令行必须输入,否则会报错

3. 可选参数在命令行输入时可以调换顺序

4.type= >命令行参数应该被转换成的数据类型,default= >参数默认值, help= >该参数的说明信息,可以在命令行输入"python Parse.py --help", choices= >该参数的备选集合,输入的值必须是其中一个,eg. choices=["MMiL","XiaoMing"]store_const=  >表示赋值为const

5."--verbose"的类型是布尔值,当用户在命令行中指定这个参数时,它的值为True,反之为Falseaction="store_true"表示当指定这个参数时,将其值设置为True.

进阶case点: 2nd & 3rd

1. required= >可选参数是否可以省略 (仅针对可选参数),,如果置为True,则必须在命令行输入,否则会报错。

2.'-n' 是可选参数'--name'的引用名,在命令行窗口可以用-n 代替'--name'

3.metavar=  在 usage 说明中的参数名称,对于必选参数默认就是参数名称,对于可选参数默认是全大写的参数名称.

4.'parasGroup=parser.add_mutually_exclusive_group()'在命令行输入互斥参数组,eg中的'--para1','--para2','--para3'只能在命令行输入一个

5. nargs= 应该读取的命令行参数个数,1. 可以是具体的数字,或者是'?'号,当不指定值时对于位置参数使用 default,2. 对于可选位置参数使用 const 或者是 '*' 号,表示 0 或多个参数, 或者是 '+' 号表示 1 或多个参数。

6. action= 命令行遇到参数时的动作,默认值是 store,:

– store_const,表示赋值为const

– append,将遇到的值存储成列表,也就是如果参数重复则会保存多个值;

– append_const,将参数规范中定义的一个值保存到一个列表;

– count,存储遇到的次数;此外,也可以继承 argparse.Action 自定义参数解析;

命令行输入与输出:

<重点通过print(parser.parse.args())查看所有变量和配置项的参数信息>

test:1st

PS D:\Desktop\testOnly> python Parse.py --ShowFlag --name=MMiL SocialUniversity

args参数表: Namespace(ShowFlag=True, Uni='SocialUniversity', age=None, name='MMiL')

name= MMiL

Uni= SocialUniversity

age= None

test 2nd

PS D:\Desktop\PyBuild\MCTS\testOnly> python Parse.py SocialUniversity --para1 12 --para2 13
usage: Parse.py [-h] [-n {MMiL,XiaoMing}] [-a AGE] [-s] [--para1 PARA1 | --para2 PARA2 | --para3 PARA3] [--LIST LIST [LIST ...]] Uni
Parse.py: error: argument --para2: not allowed with argument --para1

# 正确输入
PS D:\Desktop\PyBuild\MCTS\testOnly> python Parse.py SocialUniversity--para1 12

args参数表: Namespace(LIST=[12, 32, 23], ShowFlag=False, Uni='SocialUniversity', age=None, name='MMiL', para1=12, para2=None, para3=None)

name= MMiL

Uni= SocialUniversity

当前不能输出作者的年龄


互斥参数组的输出信息:
para1= 12

 test 3rd

PS D:\Desktop\PyBuild\MCTS\testOnly> python Parse.py SocialUniversity--LIST 12 14 532 312

args参数表: Namespace(LIST=[12, 14, 532, 312], ShowFlag=False, Uni='SocialUniversity', age=None, name='MMiL', para1=None, para2=None, para3=None)

name= MMiL

Uni= SocialUniversity

当前不能输出作者的年龄


互斥参数组的输出信息:

列表的信息是:[12, 14, 532, 312]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@Liooo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值