【学习记录】argparse模块学习总结


前言

学习记录,有问题请指正,谢谢。


一、argparse模块是什么?

argparse是python的命令行解析的标准模块,内置于python,不需要安装。这个库可以让我们直接在命令行中就可以向程序中传入参数并让程序运行。

二、使用步骤

1.基本用法

import argparse #导入argparse

parser = argparse.ArgumentParser()# 创建ArgumentParser类
parser.add_argument('-from', type=str)# 添加参数
parser.add_argument('-to', type=str, default='everyone')# 添加参数

args = parser.parse_args('-from yitian'.split(' '))
print(args)
# 运行结果
# Namespace(from='yitian', to='everyone')

2.ArgumentParser类

ArgumentParser是参数规范的容器,并且具有将解析器作为整体应用的选项。参数如下:
在这里插入图片描述

3.add_argument方法

有了Parser实例,就可以调用它的add_argument方法来添加程序可以接受的参数了。这个参数比较复杂,功能也十分强大。参数如下:
在这里插入图片描述

参数名

一共三种表达方式

  • 参数名(按照添加顺序被读取)
  • -参数名(关键字参数,可以以任意顺序指定)
  • - -参数名缩写(关键字参数的缩写)

例子

parser.add_argument('foo')
parser.add_argument('bar')
parser.add_argument('-f', '--ff', action='store_true')

action

  • store和store_const用来保存具体的值
    #'store'
    parser.add_argument('--foo')
    parser.parse_args('--foo 1'.split())
    #Namespace(foo='1')
    
    # 'store_const'
    parser.add_argument('--foo', action='store_const', const=42)
    parser.parse_args(['--foo'])
    #Namespace(foo=42)
    
  • store_true和store_false用来设置开关
    parser.add_argument('--foo', action='store_true')
    parser.add_argument('--bar', action='store_false')
    parser.add_argument('--baz', action='store_false')
    parser.parse_args('--foo --bar'.split())
    #Namespace(foo=True, bar=False, baz=True)
    
  • append和append_const会将参数存储成一个列表
    parser.add_argument('--foo', action='append')
    parser.parse_args('--foo 1 --foo 2'.split())
    #Namespace(foo=['1', '2'])
    
    parser.add_argument('--str', dest='types', action='append_const', const=str)
    parser.add_argument('--int', dest='types', action='append_const', const=int)
    parser.parse_args('--str --int'.split())
    Namespace(types=[<class 'str'>, <class 'int'>])
    
  • count会存储参数出现的次数。
    parser.add_argument('--verbose', '-v', action='count', default=0)
    parser.parse_args(['-vvv'])
    # Namespace(verbose=3)
    
    提示:default 将为 None,除非显式地设为 0。

nargs

  • N(命令行中的 N 个参数会被聚集到一个列表中)

    parser.add_argument('--foo', nargs=2)
    parser.add_argument('bar', nargs=1)
    parser.parse_args('c --foo a b'.split())
    Namespace(bar=['c'], foo=['a', 'b'])
    
  • ‘*’,所有当前命令行参数被聚集到一个列表中。

    parser.add_argument('--foo', nargs='*')
    parser.add_argument('--bar', nargs='*')
    parser.add_argument('baz', nargs='*')
    parser.parse_args('a b --foo x y --bar 1 2'.split())
    # Namespace(bar=['1', '2'], baz=['a', 'b'], foo=['x', 'y'])
    
  • ‘+’ 和 ‘*’ 类似,所有当前命令行参数被聚集到一个列表中。

    parser.add_argument('foo', nargs='+')
    parser.parse_args(['a', 'b'])
    # Namespace(foo=['a', 'b'])
    parser.parse_args([])
    # usage: PROG [-h] foo [foo ...]
    # PROG: error: the following arguments are required: foo
    

    如果不提供 nargs 命名参数,则消耗参数的数目将被 action 决定。通常这意味着单一项目(非列表)消耗单一命令行参数。

const

  • 这个参数需要和带有const的action来配合使用。

default

  • 指定参数的默认值。
  • store_const和const配合使用可以指定默认值,而store和default也可以指定默认值,那么它们之间有什么区别呢?
    import argparse
    
    parser = argparse.ArgumentParser()
    parser.add_argument('-foo', action='store', nargs='?', default=10, const=20)
    
    print(parser.parse_args('-foo 0'.split(' ')))
    print(parser.parse_args('-foo'.split(' ')))
    print(parser.parse_args(''))
    
    '''
    Namespace(foo='0')
    Namespace(foo=20)
    Namespace(foo=10)
    '''
    

type

  • 指定参数类型,int,float,str,当然比较特殊的一个是open,它会将参数作为文件来打开。
    parser.add_argument('bar', type=argparse.FileType('w'))
    

choices

  • 使用choices参数来指定可使用值,可使用值值包括字面值列表以及range函数。
    parser.add_argument('move', choices=['rock', 'paper', 'scissors'])
    parser.parse_args(['rock'])
    # Namespace(move='rock')
    parser.parse_args(['fire'])
    # usage: game.py [-h] {rock,paper,scissors}
    
    parser.add_argument('door', type=int, choices=range(1, 4))
    print(parser.parse_args(['3']))
    #Namespace(door=3)
    parser.parse_args(['4'])
    #usage: doors.py [-h] {1,2,3}
    

required

  • 指定参数是否是必须的。
    parser.add_argument('--foo', required=True)
    parser.parse_args(['--foo', 'BAR'])
    #Namespace(foo='BAR')
    parser.parse_args([])
    #usage: [-h] --foo FOO
    

metavar和dest

  • metavar参数用来指定参数的显示名称,而dest用来指定参数底层使用的属性名。

    parser.add_argument('-foo', metavar='foooo')
    parser.add_argument('-bar', dest='barrrr')
    
    parser.print_help()
    print(parser.parse_args(''))
    
    '''
    usage: argparse_sample.py [-h] [-foo foooo] [-bar bar]
    
    optional arguments:
      -h, --help  show this help message and exit
      -foo foooo
      -bar bar
    Namespace(barrrr=None, foo=None)
    '''
    

help

  • 有条件的话最好给每个参数添加帮助信息,这样使用者在用-h命令的时候就可以看到参数的帮助信息了。
    parser.add_argument('--foo', action='store_true',
                        help='foo the bars before frobbling')
    parser.add_argument('bar', nargs='+',
                        help='one of the bars to be frobbled')
    parser.parse_args(['-h'])
    usage: frobble [-h] [--foo] bar [bar ...]
    
    positional arguments:
     bar     one of the bars to be frobbled
    
    options:
     -h, --help  show this help message and exit
     --foo   foo the bars before frobbling
    

4.parse_args方法

编辑好了参数,就可以调用parse_args方法来处理参数了,它会返回一个命名空间对象,包含了解析之后的参数。如果要测试方法的话,可以手动给它传递一组参数,否则的话,它会自动从命令行参数读取。另外它还支持几个比较有用的特性:

  • 如果参数比较长,可以使用等号来连接参数与值,例如-foo=bar。

  • 如果参数是单字母长度的,可以将参数和值直接写在一起。

    parser = argparse.ArgumentParser()
    parser.add_argument('-foo')
    parser.add_argument('-b')
    print(parser.parse_args('-foo=bar'.split()))
    print(parser.parse_args('-bX'.split()))
    '''
    Namespace(b=None, foo='bar')
    Namespace(b='X', foo=None)
    '''
    

其他特性

  • 参考官网

add_mutually_exclusive_group()方法

  • 创建一个互斥组。 argparse 将会确保互斥组中只有一个参数在命令行中可用:
    group = parser.add_mutually_exclusive_group()
    group.add_argument('--foo', action='store_true')
    group.add_argument('--bar', action='store_false')
    parser.parse_args(['--foo'])
    #Namespace(bar=True, foo=True)
    parser.parse_args(['--bar'])
    #Namespace(bar=False, foo=False)
    parser.parse_args(['--foo', '--bar'])
    #usage: PROG [-h] [--foo | --bar]
    #PROG: error: argument --bar: not allowed with argument --f
    

参考

https://segmentfault.com/a/1190000021680525
https://docs.python.org/zh-cn/3/library/argparse.html#nargs

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
arg模块Python的一个标准库,用于解析命令行参数和选项。它提供了一种简单而灵活的方式来处理命令行输入,帮助开发者构建命令行界面的工具。 使用argparse模块,你可以定义命令行参数和选项,以及它们的类型、默认值和帮助信息。它还可以自动生成帮助文档,并处理用户输入的参数。 下面是一个示例,演示如何使用argparse模块来解析命令行参数: ```python import argparse # 创建一个ArgumentParser对象 parser = argparse.ArgumentParser(description='这是一个示例程序') # 添加命令行参数 parser.add_argument('input_file', help='输入文件名') parser.add_argument('--output', '-o', help='输出文件名') # 解析命令行参数 args = parser.parse_args() # 使用解析后的参数 print('输入文件名:', args.input_file) print('输出文件名:', args.output) ``` 在上面的示例中,我们创建了一个ArgumentParser对象,并添加了两个命令行参数。其中,'input_file'是一个必需的位置参数,'--output'(或'-o'的简写形式)是一个可选的参数。 当我们运行这个程序时,可以通过命令行传递参数,例如: ``` python myprogram.py input.txt -o output.txt ``` 程序会解析命令行参数,并输出结果: ``` 输入文件名: input.txt 输出文件名: output.txt ``` 这只是argparse模块的基本用法,它还提供了许多其他功能,如校验参数、分组参数等。你可以参考Python官方文档或其他教程来深入学习argparse模块的用法。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值