argparse 模块简介

 更新时间:2023年02月27日 14:46:24   作者:craftsman2020  
argparse是一个用来解析命令行参数的 Python 库,它是 Python 标准库的一部分,基于 python 2.7 的stdlib 代码,这篇文章主要介绍了argparse 模块详解,需要的朋友可以参考下

1. argparse 模块简介

argparse是一个用来解析命令行参数的 Python 库,它是 Python 标准库的一部分。基于 python 2.7 的stdlib 代码。

argparse模块使编写用户友好的命令行界面变得容易。程序定义了所需的参数,而 argparse 将找出如何从 sys.argv(命令行)中解析这些参数。argparse 模块还会自动生成帮助和使用消息,并在用户为程序提供无效参数时发出错误。

2. 未使用argparse示例

一般未使用到终端命令,对于一些需要变量赋值的程序,我们往往:

1、直接在程序中(或配置文件)写死。
2、或者利用input在命令行多次输入 这样不易多次调试及修改运行,如下就是一个示例:
import math

def cal_vol(radius,height):
    vol = math.pi * pow(radius,2) * height
    return vol
if __name__=='__main__':
    print(cal_vol(2,4))

argparse

3. 使用argparse示例

3.1 argparse简单示例

使用argparse的主要步骤:

导入argparse包;创建ArgumentParser()参数对象;调用add_argument()方法往参数对象中添加参数;使用parse_args()解析添加参数的参数对象,获得解析对象;程序的其他部分需要使用命令行参数时,用解析对象.参数获取。

如下是一个简单的示例:

import math
import argparse  # 1、导入argpase包
def parse_args():
    parse = argparse.ArgumentParser(description='Calculate cylinder volume')  # 2、创建参数对象
    parse.add_argument('radius', type=int, help='Radius of Cylinder')  # 3、往参数对象添加参数
    parse.add_argument('height', type=int, help='height of Cylinder')
    args = parse.parse_args()  # 4、解析参数对象获得解析对象
    return args
# 计算圆柱体积
def cal_vol(radius, height):
    vol = math.pi * pow(radius, 2) * height
    return vol
if __name__ == '__main__':
    args = parse_args()
    print(cal_vol(args.radius, args.height))  # 5、使用解析对象.参数获取使用命令行参数

注:此时因未指定,所以命令行参数输入默认按顺序赋值,顺序不同会造成结果不同

在这里插入图片描述

在这里插入图片描述

默认命令-h可以获取添加参数时设置的帮助信息

在这里插入图片描述

3.2 argparse进阶示例

add_argument()方法(定义如何解析命令行参数):

在这里插入图片描述

参数解释如下:

  • name or flags - 选项字符串的名字或者列表,例如 foo 或者 -f, --foo。

  • action - 命令行遇到参数时的动作,默认值是 store。

    • – store_const,表示赋值为const;
    • – append,将遇到的值存储成列表,也就是如果参数重复则会保存多个值;
    • – append_const,将参数规范中定义的一个值保存到一个列表;
    • – count,存储遇到的次数;此外,也可以继承 argparse.Action 自定义参数解析;
  • nargs - 应该读取的命令行参数个数,可以是

    • 具体的数字,或者是?号,当不指定值时对于 Positional argument 使用 default,对于 Optional argument 使用 const
    • 或者是 * 号,表示 0 或多个参数;
    • 或者是 + 号表示 1 或多个参数。
  • const - action 和 nargs 所需要的常量值。

  • default - 不指定参数时的默认值。

  • type - 命令行参数应该被转换成的类型。默认是字符串类型。

  • choices - 参数可允许的值的一个容器。

  • required - 可选参数是否可以省略 (仅针对可选参数)。

  • help - 参数的帮助信息,当指定为 argparse.SUPPRESS 时表示不显示该参数的帮助信息.

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

  • dest - 解析后的参数名称,默认情况下,对于可选参数选取最长的名称,中划线转换为下划线.

3.2.1 可选参数设置

import math
import argparse  # 1、导入argpase包
def parse_args():
    parse = argparse.ArgumentParser(description='Calculate cylinder volume')  # 2、创建参数对象
    parse.add_argument('--radius', default=2, type=int, help='Radius of Cylinder')  # 3、往参数对象添加参数
    parse.add_argument('--height', default=4, type=int, help='height of Cylinder')
    args = parse.parse_args()  # 4、解析参数对象获得解析对象
    return args
def cal_vol(radius, height):
    vol = math.pi * pow(radius, 2) * height
    return vol
if __name__ == '__main__':
    args = parse_args()
    print(cal_vol(args.radius, args.height))  # 5、使用解析对象.参数获取使用命令行参数

通过在参数名前加 - -,设置为可选参数,如果未输入,则使用default默认值(若未设置default,则会默认赋值None),如下示例:

在这里插入图片描述

3.2.2 可选参数引用名

import math
import argparse  # 1、导入argpase包
def parse_args():
    parse = argparse.ArgumentParser(description='Calculate cylinder volume')  # 2、创建参数对象
    parse.add_argument('-r', '--radius', default=2, type=int, help='Radius of Cylinder')  # 3、往参数对象添加参数
    parse.add_argument('-H', '--height', default=4, type=int, help='height of Cylinder')
    args = parse.parse_args()  # 4、解析参数对象获得解析对象
    return args

def cal_vol(radius, height):
    vol = math.pi * pow(radius, 2) * height
    return vol

if __name__ == '__main__':
    args = parse_args()
    print(cal_vol(args.radius, args.height))  # 5、使用解析对象.参数获取使用命令行参数

通过将可选参数设置引用名,可以缩短参数名,简化命令行参数输入:

在这里插入图片描述

如下:-r和- -radius都可以

在这里插入图片描述

在这里插入图片描述

3.2.3 清除帮助中的参数名信息

import math
import argparse  # 1、导入argpase包
def parse_args():
    parse = argparse.ArgumentParser(description='Calculate cylinder volume')  # 2、创建参数对象
    parse.add_argument('-r', '--radius', default=2, type=int, metavar='', help='Radius of Cylinder')  # 3、往参数对象添加参数
    parse.add_argument('-H', '--height', default=4, type=int, metavar='', help='height of Cylinder')
    args = parse.parse_args()  # 4、解析参数对象获得解析对象
    return args
def cal_vol(radius, height):
    vol = math.pi * pow(radius, 2) * height
    return vol
if __name__ == '__main__':
    args = parse_args()
    print(cal_vol(args.radius, args.height))  # 5、使用解析对象.参数获取使用命令行参数

如下,对比3.2.2中-h显示信息,去掉了参数名

在这里插入图片描述

原因:
metavar在通过-h显示 usage
说明中的参数名称,对于必选参数默认就是参数名称,对于可选参数默认是全大写的参数名称.。这里通过设置为空一律不显示。

3.2.4 必选参数设置

import math
import argparse  # 1、导入argpase包
def parse_args():
    parse = argparse.ArgumentParser(description='Calculate cylinder volume')  # 2、创建参数对象
    parse.add_argument('-r', '--radius', default=2, type=int, metavar='', required=True, help='Radius of Cylinder')  # 3、往参数对象添加参数
    parse.add_argument('-H', '--height', default=4, type=int, metavar='', required=True, help='height of Cylinder')
    args = parse.parse_args()  # 4、解析参数对象获得解析对象
    return args

def cal_vol(radius, height):
    vol = math.pi * pow(radius, 2) * height
    return vol
if __name__ == '__main__':
    args = parse_args()
    print(cal_vol(args.radius, args.height))  # 5、使用解析对象.参数获取使用命令行参数

当通过设置required=True后,无论参数是否是可选参数,都必须输入,如下示例:

在这里插入图片描述

3.2.5 列表参数(多参数)传入设置

import math
import argparse
def parse_args():
    parse = argparse.ArgumentParser(description='Calculate cylinder volume')
    parse.add_argument('-n', '--num', type=int, nargs='+', metavar='', required=True, help='a string of nums')
    args = parse.parse_args()
    return args
if __name__ == '__main__':
    args = parse_args()
    print(args.num)
    for i in list(args.num):
        print(i)

argparse

3.2.6 互斥参数使用

import math
import argparse

def parse_args():
    parse = argparse.ArgumentParser(description='Calculate cylinder volume')
    parse.add_argument('-r', '--radius', default=2, type=int, metavar='', required=True, help='Radius of Cylinder')
    parse.add_argument('-H', '--height', default=4, type=int, metavar='', required=True, help='height of Cylinder')
    group = parse.add_mutually_exclusive_group()  # 1、在参数对象中添加互斥组
    group.add_argument('-b', '--brief', action='store_true', help='print brief message')  # 2、在互斥组中添加参数(store_true默认当命令行未输入参数则为False,否则为True)
    group.add_argument('-v', '--verbose', action='store_true', help='print verbose message')
    args = parse.parse_args()
    return args
def cal_vol(radius, height):
    vol = math.pi * pow(radius, 2) * height
    return vol
if __name__ == '__main__':
    args = parse_args()
    volume = cal_vol(args.radius, args.height)
    if args.brief:
        print(volume)
    elif args.verbose:
        print('Volume of Cylinder with radius %s and height %s is %s' % (args.radius,args.height,volume))
    else:
        print('Volume of Cylinder is %s' % (volume))

命令行中b和v只能输入二者中的一个参数。

在这里插入图片描述

3.2.7 默认参数设置

set_defaults()可以设置一些参数的默认值

import math
import argparse
def parse_args():
    parse = argparse.ArgumentParser(description='Calculate cylinder volume')
    parse.add_argument('-r', '--radius', default=2, type=int, metavar='', required=True, help='Radius of Cylinder')
    parse.set_defaults(height=4)
    args = parse.parse_args()
    return args

def cal_vol(radius, height):
    vol = math.pi * pow(radius, 2) * height
    return vol
if __name__ == '__main__':
    args = parse_args()
    print(cal_vol(args.radius, args.height))

在这里插入图片描述

4. 参考文献

原文

Python argparse命令行参数解析包的详细教程

官方文档

到此这篇关于argparse 模块详解的文章就介绍到这了,更多相关argparse 模块内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • pip 安装库比较慢的解决方法(国内镜像)

    pip 安装库比较慢的解决方法(国内镜像)

    对于Python开发用户来讲,PIP安装软件包是家常便饭。但国外的源下载速度实在太慢,浪费时间。而且经常出现下载后安装出错问题,所以把PIP安装源替换成国内镜像,可以大幅提升下载速度,还可以提高安装成功率
    2019-10-10
  • Python实现抓取百度搜索结果页的网站标题信息

    Python实现抓取百度搜索结果页的网站标题信息

    这篇文章主要介绍了Python实现抓取百度搜索结果页的网站标题信息,本文使用BeautifulSoup来解析HTML,需要的朋友可以参考下
    2015-01-01
  • Python 虚拟环境venv详解

    Python 虚拟环境venv详解

    Python 虚拟环境主要是为不同 Python 项目创建一个隔离的环境,每个项目都可以拥有独立的依赖包环境,而项目间的依赖包互不影响,对Python 虚拟环境venv相关知识感兴趣的朋友一起看看吧
    2021-09-09
  • python如何实现反向迭代

    python如何实现反向迭代

    这篇文章主要为大家详细介绍了python如何实现反向迭代,进行反向迭代,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • 详解python3百度指数抓取实例

    详解python3百度指数抓取实例

    本篇文章主要介绍了python3百度指数抓取,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧。
    2016-12-12
  • GitHub 热门:Python 算法大全,Star 超过 2 万

    GitHub 热门:Python 算法大全,Star 超过 2 万

    4 月 27 日,GitHub 趋势榜第 3 位是一个用 Python 编码实现的算法库,Star 数早已达到 26000+
    2019-04-04
  • Pytorch中DataLoader的使用方法详解

    Pytorch中DataLoader的使用方法详解

    在Pytorch中,torch.utils.data中的Dataset与DataLoader是处理数据集的两个函数,用来处理加载数据集,这篇文章主要介绍了Pytorch中DataLoader的使用方法,需要的朋友可以参考下
    2022-09-09
  • numpy中数组拼接、数组合并方法总结(append(), concatenate, hstack, vstack, column_stack, row_stack, np.r_, np.c_等)

    numpy中数组拼接、数组合并方法总结(append(), concatenate, hstack, vstack

    numpy库是一个高效处理多维数组的工具,可以在进行边写的数组计算上进行一系列的操作,下面这篇文章主要给大家介绍了关于numpy中数组拼接、数组合并方法(append(), concatenate, hstack, vstack, column_stack, row_stack, np.r_, np.c_等)的相关资料,需要的朋友可以参考下
    2022-08-08
  • 如何使用Tkinter进行窗口的管理与设置

    如何使用Tkinter进行窗口的管理与设置

    Tkinter是Python的标准GUI库,它实际是建立在Tk技术上的。在大多数Unix平台以及Windows系统上都可用
    2021-06-06
  • 浅谈python的输入输出,注释,基本数据类型

    浅谈python的输入输出,注释,基本数据类型

    这篇文章主要介绍了python的输入输出,注释,基本数据类型,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04

最新评论