• Python 之 argparse 解析命令行参数模块


    参考:
    Python–argparse 模块:https://www.jianshu.com/p/ea52fdfaa4ad

    Part.I 预备知识

    argparsepython用于解析命令行参数和选项的标准模块,用于代替已经过时的optparse模块。argparse模块的作用是用于解析命令行参数。

    Chap.I 安装

    argsparsepython的命令行解析的标准模块,内置于python,不需要安装。使用的时候直接:

    import argparse
    
    • 1

    Chap.II 使用的一般步骤

    这个模块使用起来十分简单,就类似于 造(买)个冰箱→在冰箱里面放点食材→需要的时候把食材拿出来做出美味的食物。

    它的使用分为三步:

    # 1.创建一个解析对象;
    parser = argparse.ArgumentParser()
    # 2.然后向该对象中添加你要关注的命令行参数和选项,
    #   每一个 add_argument 方法对应一个你要关注的参数或选项;
    parser.add_argument()
    # 3. 最后调用 parse_args()方法进行解析;
    parser.parse_args()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    另外,关于参数的书写习惯,有如下几种

    • 空格分开,最常用,比如parser.parse_args('-x X'.split())
    • 长选项用=分开 ( “长”选项名字,即选项的名字多于一个字符),比如parser.parse_args('--foo=FOO'.split())
    • 短选项可以写在一起,比如parser.parse_args('-xX')

    Part.II 实操笔记

    上面简要介绍了使用的基本步骤,下面首先详细介绍涉及到的几个函数,然后再给一个实例。

    Chap.I 函数详解

    Sec.I ArgumentParser

    这个函数的作用就是创建一个解析对象(冰箱),下面是它的参数列表:

    ArgumentParser(prog=None, 
    usage=None,
    description=None, 
    epilog=None, 
    parents=[],
    formatter_class=argparse.HelpFormatter, 
    prefix_chars='-',
    fromfile_prefix_chars=None, 
    argument_default=None,
    conflict_handler='error', 
    add_help=True)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    参数含义如下所示:

    • prog:程序的名字,默认为sys.argv[0],用来在help信息中描述程序的名称。
    • usage:描述程序用途的字符串
    • description:help信息前的文字。
    • epilog:help信息之后的信息
    • add_help:设为False时,help信息里面不再显示-h --help信息。
    • prefix_chars:参数前缀,默认为-
    • fromfile_prefix_chars:前缀字符,放在文件名之前
    • argument_default:参数的全局默认值。
    • conflict_handler:对冲突的处理方式,默认为返回错误“error”。还有“resolve”,智能解决冲突。当用户给程序添加了两个一样的命令参数时,“error”就直接报错,提醒用户。而“resolve”则会去掉第一次出现的命令参数重复的部分或者全部(可能是短命令冲突或者全都冲突)。

    Sec.II add_argument

    此函数用来指定程序需要接受的命令参数,它的参数列表如下所示:

    add_argument(name or flags...
    [, action]
    [, nargs]
    [, const]
    [, default]
    [, type]
    [, choices]
    [, required]
    [, help]
    [, metavar]
    [, dest])
    # 注:[] 表示可选
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    参数含义如下:

    • name or flags:参数有两种,可选参数和位置参数。parse_args()运行时,会用-来认证可选参数,剩下的即为位置参数。位置参数必选,可选参数可选。
    • action:参数动作;argparse内置6种动作可以在解析到一个参数时进行触发:store 保存参数值,可能会先将参数值转换成另一个数据类型。若没有显式指定动作,则默认为该动作。store_const 保存一个被定义为参数规格一部分的值,而不是一个来自参数解析而来的值。这通常用于实现非布尔值的命令行标记。store_ture/store_false 保存相应的布尔值。这两个动作被用于实现布尔开关。append 将值保存到一个列表中。若参数重复出现,则保存多个值。append_const 将一个定义在参数规格中的值保存到一个列表中。version 打印关于程序的版本信息,然后退出。 count统计参数出现的次数。
    • nargs:参数的数量。值可以为整数N(N个),*(任意多个),+(一个或更多),值为?时,首先从命令行获得参数,若没有则从const获得,然后从default获得:
    • dest:参数值就保存为parse_args()返回的命名空间对象中名为该 dest 参数值的一个属性。如果提供dest,例如dest="a",那么可以通过args.a访问该参数
    • default:设置参数的默认值
    • type:把从命令行输入的结果转成设置的类型
    • choice:允许的参数值
    • required:是否必选
    • desk:可作为参数名
    • help:参数命令的介绍

    Chap.II 调用实例

    下面给个简单的示例,只是说明如何调用而已,后续可根据上面对函数的详细解释来使其更实用智能。

    import argparse
    
    parser = argparse.ArgumentParser(description ="This is a Test!")
    parser.add_argument("type",choices=['scheduler','tool'],
                        help="make application type")
    parser.add_argument('-c',dest='configurefile',help="configure file")
    
    parser.print_help()
    args = parser.parse_args(["tool","-c","a.ini"])
    print(args.type)
    print(args.configurefile)
    # --------------output------------------
    usage: draft.py [-h] [-c CONFIGUREFILE] {scheduler,tool}
    
    This is a Test!
    
    positional arguments:
      {scheduler,tool}  make application type
    
    optional arguments:
      -h, --help        show this help message and exit
      -c CONFIGUREFILE  configure file
    tool
    a.ini
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    这个简单的例子就,就创建了一个argparse对象,然后加了两个参数(不算-h),一个是必选参数tool,另一个是可选参数-c,然后使用dest将其转换为参数的一个属性。
    ps:其实一开始笔者遇到了一个问题,一开始笔者在必选参数前加了type,其实是不用的,对于必选参数直接给值即可。
    另外,当有多个必选参数时,需要注意必选参数的顺序一定要和加参数的顺序保持一致。
    可选参数和必选参数可以交换顺序,只需保持可选参数与值不要分开,必选参数的相对顺序与加参数的顺序保持一致即可!

  • 相关阅读:
    渗透测试之分享常用工具、插件和脚本(干货)
    【OpenCV】Chapter6.频率域图像滤波
    互联网摸鱼日报(2023-09-04)
    面试打底稿⑥ 项目一的第二部分
    nginx----(1)nginx的单机安装
    python读取json文件并转换成list存为json,解决存取json中文乱码问题
    python发送邮件和企业微信
    谷歌浏览器Chrome 100即将发布,但可能无法正常使用?
    数据结构与算法分析之优先队列
    服务器安全怎么保障,主机安全软件提供一站式保护
  • 原文地址:https://blog.csdn.net/Gou_Hailong/article/details/125988360