Python argparse模块

玩转Python

这是我参与8月更文挑战的第14天,活动详情查看: 8月更文挑战

复习回顾

Python目前支持序列化的模块有三个,我们在前面已经学习

  • 使用二进制协议对数据进行序列和反序列化操作-pickle模块
  • 对数据进行转换成JSON格式和反序列化操作-json模块
  • 使用类似字典键值对数据进行序列和反序列化操作-shelve模块
  • 第三方库,是json模块的升级版对无用字符进行优化-messagepack模块

序列化模块

本期,我们来学习专门对命令行参数和选项进行解析 Python 内置模块-argparse 模块

🎀今天七夕佳节,不管有家室的还是没有家室的,约会吃狗粮晚上才开始。

那我们先带上耳机🎧、放上音乐🎼,完成今天的学习💃💃💃~,再去见💟的TA吧(#^.^#)

1. argparse模块概述

argparse 模块是Python专门用来对命令行选项、参数以及子命令来进行解析器

👉argparse 模块优点:

  • 提供易于编写的用户命令行接口,方便用户上手使用
  • 程序只需要定义需要的参,argparse模块负责从sys.argv中解析出所需要的命令行参数
  • 自动生成帮助文档和使用手册
  • 自动检查传入程序参数有效性。若输入的参数无效会及时给出对应的报错信息

👉argparse 模块解析命令主要包括如下步骤:

    1. 导入argparse模块
    1. 使用argparse.ArgumentParser()创建解析器对象
    1. 解释器对象调用add_argument()来添加参数
    1. 解释器对象使用parse_args()对用户输入的命令行参数进行解析

📢敲黑板:

  • ArgumentParser对象包含将命令行解析成Python数据类型所需的全部信息
  • add_argument添加参数是指定ArgumentParser解释器对象如何获取字符串并将其转换为对象的
  • parse_args默认不会被带参数调用,而是直接使用ArgumentParser自动从sys.argv中确定命令行的参数

2. argparse模块相关方法

argparse 模块提供创建解释器和一些格式化帮助文档的类如下:

方法/类作用
argparse.ArgumentParser()创建解释器 ArgumentParser 对象
argparse.Action(op,dest)返回的可调用对象可处理来自命令行的参数
argparse.RawDescriptionHelpFormatter格式化description和epilog
argparse.RawTextHelpFormatter格式化帮助文档,可保留文字直接的空格
argparse.ArgumentDefaultsHelpFormatter自动添加默认的值的信息到每一个帮助信息的参数中
argparse.MetavarTypeHelpFormatter每个参数的值都显示其type类型
argparse.Namespace()创建一个存放属性的对象并将其返回
argparse.FileType(mode,buffsiz)FileType对象用于解释器的type参数传入对象
argparse.parse_intermixed_args混合解析,把所有参数都放在列表里
argparse.parse_known_intermixed_args混合解析,返回由两个条目组成的元组

📣 重要说明:

  • argparse.ArgumentParser解析器的参数共有13个

    参数名称说明
    Prog程序的名字,缺省使用,sys.argv[0]
    add_help自动生成解析器增加 - h和--help选项,默认为True
    description为程序添加功能描述,在参数文档之前先文本,默认值为None
    epilog参数帮助文档之后显示的说明文本,默认值为None
    parents解释器对象的列表,在传递给解释器前必须要先初始化
    formatter_class用于自定义帮助文档输出格式化类,共有4种
    prefix_chars可选参数的前缀字符集合,默认为‘-’
    formfile_prefix_chars可以从文件中读取其他参数时,用于标识文件名前缀字符集合,默认值为None
    argument_default参数的全局默认值,默认值为None
    confict_handler解决冲突选项的策略
    add_help为解释器添加一个-h/--help选项,默认为True
    allow——abbrev如果缩写无歧义,则允许缩写选项,默认为True
    exit_on_error决定当错误发生是否让解释器附带错误信息退出,默认为True
  • ArgumentParser对象也提供很多方法如下

    方法作用
    ArgumentParser.add_argument(name)定义添加单个命令行参数如何解析
    ArgumentParser.parse_args()解析命令行
    ArgumentParser.add_subparsers()许多程序都会将其功能拆分为一系列子命令
    ArgumentParser.add_argument_group()创建适当的分组
    ArgumentParser.add_mutually_exclusive_group创建互斥组
    ArgumentParser.set_defaults()设置指令默认值
    ArgumentParser.get_default()获取一个命名空间属性的默认值
    ArgumentParser.print_usage()打印一段简短描述
    ArgumentParser.print_help()打印一条帮助消息

3. 小试牛刀

我们来使用argparse模块实现对命令行参数进行解析操作:

📝小案例: 在命令行中求输入数字的平方

import argparse

parser = argparse.ArgumentParser(description="welcome to Juejin ")

parser.add_argument("square", help="display a square of a given number",
                    type=int)

args = parser.parse_args()

print(args.square**2)

命令行运行结果

⚠️在Pycharm中运行该程序,是无法运行成功的,会提示你去命令行窗口运行文件

Pycharm运行报错

💟PS: 我们可以在命令行中查看帮助文档如下

命令行中查看程序帮助文档

总结

本期,我们学习argparse模块提供对命令行参数及选项的解析方法,用于代替已经过时的optparse模块。

不管我们使用Linux还是Windows系统,或多或少都要使用到命令去操作,同理我们程序中有些步骤需要对命令行进行解析的情况,argparse 模块提供 parse_args() 对命令解析

以上是本期内容,欢迎大佬们点赞评论指正,下次见~ღ( ´・ᴗ・` )比心🌹🌹🌹🌹🌹✈️