python 笔记:argparse

Posted UQI-LIUWJ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 笔记:argparse相关的知识,希望对你有一定的参考价值。

1 介绍

        argparse模块可以让人轻松编写用户友好的命令行接口。程序定义它需要的参数,然后argparse模块将弄清如何从sys.argv中解析出那些参数。

        argparse模块还会自动生成帮助和使用手册,并在用户给程序传入无效参数时报出错误信息。

2 基本步骤

2.0 导入库

import argparse

2.1 创建解析器

第一步是创建一个ArgumentParser对象:

parser = argparse.ArgumentParser(description='Process some integers.')

ArgumentParser对象包含将命令行解析成 Python 数据类型所需的全部信息。

2.2 添加参数

        给一个ArgumentParser对象添加程序参数信息是通过调用add_argument方法完成的。

        通常,这些调用指定 ArgumentParser对象如何获取命令行字符串并将其转换为对象。

        这些信息在之后parse_args()调用时被存储和使用。

        ArgumentParser对象的关键字见3

parser.add_argument(
    'integers', 
    metavar='N', 
    type=int, 
    nargs='+',
    help='an integer for the accumulator')


parser.add_argument(
    '--sum', 
    dest='accumulate', 
    action='store_const',
    const=sum, 
    default=max,
    help='sum the integers (default: find the max)')

        之后parse_args()调用时,将返回一个具有 integers 和 accumulate 两个属性的对象。

                integers 属性将是一个包含一个或多个整数的列表

                accumulate 属性当命令行中指定了 --sum 参数时将是sum函数,否则则是max函数。

2.3 解析参数

       ArgumentParser对象通过parse_args()方法解析参数。

       它将检查命令行,把每个参数转换为适当的类型然后调用相应的操作。

parser.parse_args(['--sum', '7', '-1', '42'])

        在脚本和命令行中,通常parse_args()会被不带参数调用,而ArgumentParser对象将自动从 sys.args 中确定命令行参数。

2.4 提取参数

args = parser.parse_args(),得到的结果是一种类似于python字典的数据类型

import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--foo', help='foo help')
args = parser.parse_args()
print(args)

 我们可以使用args.参数名的方式来提取参数

import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--foo', help='foo help')
parser.add_argument('bax')
args = parser.parse_args()
print('args.foo',args.foo,'args.bax',args.bax)

 

 

3 ArgumentParser对象关键字

prog

程序的名称(默认值:sys.argv[0]

        这一默认值几乎总是可取的,因为它将使帮助消息与从命令行调用此程序的方式相匹配。

usage

描述程序用途的字符串(默认值:从添加到解析器的参数生成)

        默认情况下,会根据它包含的参数来构建用法消息:

 

 

当手动设置usage 的时候,可以覆盖这个默认消息

 

 

description

在参数帮助文档之前显示的文本(默认值:无)

        这个参数简要描述这个程序做什么以及怎么做。

        在帮助消息中,这个描述会显示在命令行用法字符串和各种参数的帮助消息之间:

 

 

epilog

在参数帮助文档之后显示的文本(默认值:无)

parents

一个ArgumentParser对象的列表,它们的参数也应包含在内

 有些时候,少数解析器会使用同一系列参数。

单个解析器能够通过提供“parents= 参数”给ArgumentParser对象,使用相同的参数,而不是重复这些参数的定义。

参数使用ArgumentParser对象的列表,从它们那里收集所有的位置和可选的行为,然后将这写行为加到正在构建的ArgumentParser对象中。

 

注意大多数父解析器会指定 add_help=False . 否则, ArgumentParse 将会看到两个 -h/--help 选项(一个在父参数中一个在子参数中)并且产生一个错误。

formatter_class

用于自定义帮助文档输出格式的类

formatter_class

prefix_chars

可选参数的前缀字符集合(默认值: '-')

        许多命令行会使用 - 当作前缀,比如 -f/--foo。如果解析器需要支持不同的或者额外的字符,比如像 +f 或者 /foo 的选项,可以在参数解析构建器中使用“ prefix_chars= 参数”。

 

fromfile_prefix_chars

当需要从文件中读取其他参数时,用于标识文件名的前缀字符集合(默认值: None

fromfile_prefix_chars

argument_default参数的全局默认值(默认值: None
conflict_handler解决冲突选项的策略(通常是不必要的)
add_help为解析器添加一个 -h/--help 选项(默认值: True
allow_abbrev

如果缩写是无歧义的,则允许缩写长选项 (默认值:True

默认为True的话,这两个表示的都是+abc的意思 

exit_on_error决定当错误发生时是否让 ArgumentParser 附带错误信息退出。 (默认值: True)

4 add_argument 方法

定义单个的命令行参数应当如何解析。它的形参如下:

names

一个命名或者一个选项字符串的列表,例如 foo 或 -f, --foo

前缀:

parser.add_argument('-f', '--foo')

位置参数:

parser.add_argument('bar')

当parse_args()函数被调用,选项会以 - 前缀识别,剩下的参数则会被假定为位置参数:

action

当参数在命令行中出现时使用的动作基本类型。

        将命令行参数与动作相关联。

        这些动作可以做与它们相关联的命令行参数的任何事,尽管大多数动作只是简单的向parse_args() 返回的对象上添加属性。

  action 命名参数指定了这个命令行参数应当如何处理

'store'

存储参数的值。这是默认的动作

'store_const'

存储被const参数指定的值

 只有被parser解析了才会赋值 

'store_true' 

'store_false'

 'store_const' 分别用作存储 True 和 False 值的特殊用例。(它们的默认值分别为 False 和 True【反过来】)

'append'

存储一个列表,并且将每个参数值追加到列表中。在允许多次使用选项时很有用。

 

nargs

命令行参数应当消耗的数目。

关联不同数目的命令行参数到单一动作

N (一个整数)

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

 注意 nargs=1 会产生一个单元素列表。这和默认的元素本身是不同的。(bar和cat的区别)

'?'

         如果可能的话,会从命令行中消耗一个参数,并产生一个单一项。如果当前没有命令行参数,则会产生default值。

 

      对于选项,如果选项字符串出现但没有跟随命令行参数,则会产生 const值

‘*’

所有当前命令行参数被聚集到一个列表中。

const

被一些action和nargs选择所需求的常数。

``const`` 参数用于保存不从命令行中读取但被各种ArgumentParser对象的动作需求的常数值。

最常用的两例为上面所说的两种情况:

  • 当add_argument()调用 action='store_const' 时。这些动作将 const 值添加到parse_args()返回的对象的属性中。
  • 当add_argument()通过选项(例如 -f 或 --foo)调用并且 nargs='?' 时。当解析命令行时,如果选项后没有参数,则将用 const 代替。
default

当参数未在命令行中出现并且也不存在于命名空间对象时所产生的值。

对于nargs等于 ? 或 * 的位置参数, default 值在没有命令行参数出现时使用。

 

 

提供 default=argparse.SUPPRESS 导致命令行参数未出现时没有属性被添加

 

type

命令行参数应当被转换成的类型。

默认情况下,解析器会将命令行参数当作简单字符串读入。

用户自定义的函数也可以被使用

 

choice可用的参数的容器
required

此命令行选项是否可省略 (仅选项可用)

通常会认为 -f 和 --bar 等选项是指明 可选的 参数,它们可以在命令行中被忽略。

要让一个选项成为 必需的,则可以将 True 作为 required关键字的参数

help一个此选项作用的简单描述。
metavar

在使用方法消息中使用的参数值示例。(该值不是默认值)

 

参考资料:

argparse --- 命令行选项、参数和子命令解析器 — Python 3.10.0 文档

以上是关于python 笔记:argparse的主要内容,如果未能解决你的问题,请参考以下文章

Python命令模块argparse学习笔记

python 笔记:argparse

Python命令模块argparse学习笔记

学习笔记:python3,代码片段(2017)

处理 argparse 冲突

Python Argparse,如何正确组织 ArgParse 代码