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相关推荐

  1. python遍历argparse的parse_args()

    python遍历argparse的parse_args()对象 由于我想把parse_args()对象的数据格式化后保存在log日志文件,于是我想要遍历解析器配置的参数. 简单通过for i in a ...

  2. python使用argparse解析命令行参数

    python使用argparse解析命令行参数 你的程序如何能够解析命令行选项(位于sys.argv中) #示意使用sys.argv进行参数解析: #注意,sys.argv中第0个索引是函数本身,所以 ...

  3. tkinter 笔记: radiobutton 选择按钮(莫烦python笔记)

    1 主体框架还是那个主体框架 window = tk.Tk() window.title('my window') window.geometry('500x500') 2 设置tkinter的文字变 ...

  4. tkinter 笔记:列表部件 listbox (莫烦python 笔记)

    1  主体框架 主体框架部分还是 import tkinter as tkwindow = tk.Tk() #创建窗口window.title('my window') #窗口标题window.geo ...

  5. python笔记: 生成器

    元素按照某种算法推算出来,我们在循环的过程中不断推算出后续的元素 不必创建完整的list,从而节省了大量的空间 这种一边循环一遍计算的机制,称之为生成器generator 1 列表生成器 把列表生成式 ...

  6. python输出字体的大小_Toby的Python笔记 | 预备知识:安装openpyxl学做电子表格

    Toby的Python笔记 | 预备知识:安装openpyxl学做电子表格 Python 需要创建和读取excel表里面的数据,需要用 openpyxl 这个包,今天安装好备用. 首先,进入C命令窗口 ...

  7. c++ 冒泡排序_干货|python笔记1-冒泡排序

    面试的时候经常有面试官喜欢问如何进行冒泡排序?这个问题相信可以难倒一批的同学,本篇就详细讲解如何用python进行冒泡排序. 基本原理 01概念: 冒泡排序是一种交换排序,它的基本思想是:两两比较相邻 ...

  8. python笔记-1(import导入、time/datetime/random/os/sys模块)

    python笔记-6(import导入.time/datetime/random/os/sys模块) 一.了解模块导入的基本知识 此部分此处不展开细说import导入,仅写几个点目前的认知即可.其它内 ...

  9. python慕课笔记_MOOC python笔记(三) 序列容器:字符串、列表、元组

    Python Python开发 Python语言 MOOC python笔记(三) 序列容器:字符串.列表.元组 容器概念 容器是Python中的重要概念,分为有序与无序. 有序容器也称为序列类型容器 ...

  10. python的argparse模块

    使用步骤: 1:import argparse        #导入argparse模块 2:parser = argparse.ArgumentParser()        #创建实例 3:par ...

最新文章

  1. WebGL Shader 环境搭建
  2. 最大矩形—leetcode85
  3. linux非root用户启动桌面
  4. Google小组研发模式分析 1
  5. 如何给multicraft装PHP,我的世界Linux搭建Multicraft网页后台教程更新和添加服务端文件...
  6. Web负载均衡学习笔记之四层和七层负载均衡的区别
  7. .NET平台下Web树形结构程序设计
  8. java如何阻塞和同步_同步与异步,阻塞与非阻塞
  9. Flash 3D 基础
  10. 郑州大学远程教育学院C语言程序设计题库(二)
  11. mysql数据库安装教程(超级超级详细)
  12. 微博android签名工具,微博签名
  13. js中new一个对象的过程
  14. 手机浏览器打开不本地html,手机浏览器打不开网页怎么办
  15. 截止失真放大电路_数字电路基础(一)
  16. 慕课软件工程(第五章.初始模块结构图的设计)
  17. js怎样判断是不是整数
  18. Intel处理器执行环境
  19. 修改XAMPP启动mysql报错Port 3306 in use by D:\xampp\mysql\bin\mysqld!
  20. 双非一本考研国防科技大学计算机,【收藏】40所不歧视本科 保护一志愿院校 含多所985/211!...

热门文章

  1. Photoshop之学习笔记(2) - 常用快捷键
  2. iOS开发- UICollectionView详解+实例
  3. 进程外Session和进程内Session存储
  4. 常用的 cocos2d-x 游戏开发工具
  5. DHCP详细工作过程
  6. CSP认证201403-2窗口[C++题解]:模拟、结构体
  7. PAT甲级1114 Family Property:[C++题解]结构体、并查集、测试点3、4、5有问题的进来!!
  8. PAT甲级1139 First Contact (30 分):[C++题解] 图论、暴力枚举两个点、hash映射
  9. 程序不能使用中文名_这几款车没有中文名?那买车时应该怎么叫?
  10. cr材质库怎么安装_cr5.0安装没有材质库