python 小知识--- 解析命令行参数模块argparse

argparse

argparse是python中用于解析命令行参数和选项的标准模块,它可以帮助我们轻松编写用户友好的命令行接口,它还会自动生成帮助和使用手册,并在用户给程序传入无效参数时报出错误信息

使用方法

先看一段实例代码 test.py

import argparse
from functools import reduce

Calculator = {
    "add": lambda n: reduce(lambda x, y: x+y, n),
    "sub": lambda n: reduce(lambda x, y: x - y, n),
    "mul": lambda n: reduce(lambda x, y: x * y, n),
    "div": lambda n: reduce(lambda x, y: x / y, n),
    "rem": lambda n: reduce(lambda x, y: x % y, n),
    "pow": lambda n: reduce(lambda x, y: x ** y, n),
    "min": lambda n: min(n),
    "max": lambda n: max(n)}


if __name__ == '__main__':
    parser = argparse.ArgumentParser(description="shadow's Calculator")
    parser.add_argument('-t', '--type', type=str, choices=['int', 'float'], help='return int or float', default='int')
    parser.add_argument('-m', '--mode', type=str, choices=['add', 'sub', 'mul', 'div', 'pow'], help='the mode of operation')
    # parser.add_argument('-n', '--nums', nargs='*', type=float, required=True, help='the nums of operation')
    parser.add_argument('-n', '--nums', nargs=2, type=float, required=True, help='the nums of operation')
    args = parser.parse_args()
    if args.mode:
        nums = args.nums
        print(eval(args.type)(Calculator[args.mode](nums)))
    else:
        print("Missing parameter '--mode'. Please choose from ['add', 'sub', 'mul', 'div', 'pow'].")
        exit(-1)

看一下运行效果:

运行命令:python3 test.py -m add -n 2.3 3.4 
获得结果:5
运行命令:python3 test.py -t float -m div -n 2.3 3.4 
获得结果:0.676470588235294
参数说明
	# 获取argparse对象,description参数可以用于插入描述脚本用途的信息,可以为空
    parser = argparse.ArgumentParser(description="shadow's Calculator")
     # 添加 --type标签,标签别名可以为 -t,help参数用于描述参数的用途或意义, type:输入参数的类型,choices:可选的参数值 default:默认值
    parser.add_argument('-t', '--type', type=str, choices=['int', 'float'], help='return int or float', default='int')
    parser.add_argument('-m', '--mode', type=str, choices=['add', 'sub', 'mul', 'div', 'pow'], help='the mode of operation')
    # 表示必须输入两个浮点数参数
    parser.add_argument('-n', '--nums', nargs=2, type=float, required=True, help='the nums of operation')
    # 将变量以标签-值的字典形式存入args namespace
    args = parser.parse_args()
  • 位置参数’-t’, ‘–type’: 分别表示 --type标签和标签别-t
  • help: 参数用于描述参数的用途或意义
  • type: 输入参数的类型
  • choices:可选的参数值
  • required: 为True表示必选参数
  • nargs:限定输入参数个数
    1. ‘*’: 之后所有的输入都将作为该位置参数的值
    2. ‘+’: 表示读取至少1个该位置参数
    3. ’?’:表示该位置参数要么没有,要么就只要一个
  • action:指出应该如何处理命令行参数(支持的操作:’store’ ,’store_const’,’store_true’,’store_false’,’append’,’append_const’,’count’,’help’,’version’)
  1. 互斥参数:action=‘store_true’,同一组下的参数只能使用一个

根据上需参数要求看错误的输入提示

注:argparse默认带–help/-h标签

帮助命令

运行命令:python3 test.py -h
提示:usage: test.py [-h] [-t {int,float}] [-m {add,sub,mul,div,pow}] -n NUMS NUMS

shadow's Calculator

optional arguments:
  -h, --help            show this help message and exit
  -t {int,float}, --type {int,float}
                        return int or float
  -m {add,sub,mul,div,pow}, --mode {add,sub,mul,div,pow}
                        the mode of operation
  -n NUMS NUMS, --nums NUMS NUMS
                        the nums of operation

提示需要输入必选参数nums

运行命令:python3 test.py 
提示:usage: test.py [-h] [-t {int,float}] [-m {add,sub,mul,div,pow}] -n NUMS NUMS
test.py: error: the following arguments are required: -n/--nums

提示需要需要输入参数2个

运行命令:python3 test.py -n 2
提示:usage: test.py [-h] [-t {int,float}] [-m {add,sub,mul,div,pow}] -n NUMS NUMS
test.py: error: argument -n/--nums: expected 2 arguments

提示需要需要输入参数2个

运行命令:python3 test.py -n 2
提示:usage: test.py [-h] [-t {int,float}] [-m {add,sub,mul,div,pow}] -n NUMS NUMS
test.py: error: argument -n/--nums: expected 2 arguments

提示nums参数类型不符

运行命令:python3 test.py -n 2 sss
提示:usage: test.py [-h] [-t {int,float}] [-m {add,sub,mul,div,pow}] -n NUMS NUMS
test.py: error: argument -n/--nums: invalid float value: 'sss'

执行程序中判断提示,缺少mode

运行命令:python3 test.py -n 2 3
提示:Missing parameter '--mode'. Please choose from ['add', 'sub', 'mul', 'div', 'pow'].

提示mode参数不在可选范围内

运行命令:python3 test.py -n 2 3 -m sss
提示:usage: test.py [-h] [-t {int,float}] [-m {add,sub,mul,div,pow}] -n NUMS NUMS
test.py: error: argument -m/--mode: invalid choice: 'sss' (choose from 'add', 'sub', 'mul', 'div', 'pow')
argparse.Namespace

parse_args() 默认使用的简单的类,用于创建一个保存属性的对象并返回该对象。
有时可能需要让ArgumentParser分配属性给一个已经存在的对象而不是一个新的Namespace对象。这可以通过指定namespace=关键字参数达到。

程序添加打印代码:print(args, type(args))
运行命令:python3 test.py  -n 2.3 3.4 -m sub
运行结果:
Namespace(mode='sub', nums=[2.3, 3.4], type='int') <class 'argparse.Namespace'>
-1

可以自定义类然后设置给parser对象

class Shadow:
    pass
s = Shadow()
parser.parse_args(args=['--mode', 'add'], namespace=s)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值