介绍

在终端运行python程序,会出现需要参数的需求,我们可以自己解析sys.argv中传递的参数,但python提供了更好的方式argparse模块中的ArgumentParser类。

我们要做的就是实例化ArgumentParser,然后调用parse_args方法就可以使用。

下面是一个简单的栗子

from argparse import ArgumentParser

import sys

parser = ArgumentParser()

parser.parse_args(sys.argv[1:])

在终端执行文件加上--help或者-h参数,就可以获得说明,是不是很酷!

D:\desktop>python argparseLearn.py --help

usage: argparseLearn.py [-h]

optional arguments:

-h, --help show this help message and exit

当然,我们作为厉害的python程序编写者,仅仅提供一个--help参数肯定是不够的,可以利用add_argument方法增加参数,又到了foo参数上场的时候了

parser.add_argument('--foo',help='foo help')

D:\desktop>python argparseLearn.py --help

usage: argparseLearn.py [-h] [--foo FOO]

optional arguments:

-h, --help show this help message and exit

--foo FOO foo help

D:\desktop>python argparseLearn.py --foo 3

Namespace(foo='3')

到这里,ArgumentParser最基本的用法我们已经掌握了

修改显示界面

通过添加初始化参数,能够让我们的参数帮助界面更人性化

prog参数可以修改程序显示名称

description可以添加描述信息

usage修改usage信息,会覆盖prog参数

epilog在末尾添加帮助信息

parser = ArgumentParser(description = 'owen introduce',prog='argparseLearn',usage='try to use',epilog='thus is the end')

usage: try to use

owen introduce

optional arguments:

-h, --help show this help message and exit

--foo FOO foo help

thus is the end

还有一些其他参数:

add_help = False 禁止显示帮助界面,只接收参数

argument_default=argparse.SUPPRESS 限制只能从命令行传递参数,程序中指定无效

allow_abbrev=False 例如--fooo,输入--foo,则不可以识别参数,默认可以

conflict_handler='resolve' 若参数重名,则不报错

add_help = False optional arguments中的help信息不会显示

add_argument方法

参数类型

add_argument中参数有两种,一种是加前缀'-'或者'--'叫做可选参数,一种是不加前缀叫做位置参数,如果位置参数不传变量,则报错。

parser.add_argument('-foo',help='foo help')

parser.add_argument('bar',help='bar help')

D:\desktop>python argparseLearn.py 3

Namespace(bar='3', foo=None)

D:\desktop>python argparseLearn.py

usage: argparseLearn.py [-h] [-foo FOO] bar

argparseLearn.py: error: the following arguments are required: bar

参数默认值

store_const - add_argument中默认action=’store‘,直接保存从运行终端或程序中传入的变量。

如果想修改为常量,需要修改action='store_const',然后指定const

parser.add_argument('--foo', action='store_const', const=42)

D:\desktop>python argparseLearn.py --foo

Namespace(foo=42)

store_true/false - 如果需要存储True或者False,只要指定action='store_true/false'

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

parser.add_argument('--foo', action='store_false')

D:\desktop>python argparseLearn.py --foo

Namespace(foo=True)

需要注意的是,如果指定action为store_const或者store_true,则参数不可再进行赋值

D:\desktop>python argparseLearn.py --foo 3

usage: argparseLearn.py [-h]

argparseLearn.py: error: unrecognized arguments: --foo 3

append - 同一参数,需要多个值时候,需要指定action='append'

parser.add_argument('--foo', action='append')

D:\desktop>python argparseLearn.py --foo 1 --foo 2

Namespace(foo=['1', '2'])

dest - 如果想要修改变量名,使用dest

parser.add_argument('--foo',dest='oop'

D:\desktop>python argparseLearn.py --foo 3

Namespace(oop='3')

version - 需要指定action='version',打印version后会自动退出

parser.add_argument('--version',action='version',version='PROG 2.0')

D:\desktop>python argparseLearn.py --version

PROG 2.0

更酷的是,我们可以直接覆盖的argparse.Action的init和call方法来自定义action,我们限制dest不能为oop,否则报错ValueError

class FooAction(Action):

def __init__(self,option_strings,dest,nargs=None,**kwargs):

if dest=='oop':

raise ValueError('name oop is not allowed')

super().__init__(option_strings, dest, **kwargs)

def __call__(self,parser,namespace,values,option_strings=None):

setattr(namespace,self.dest,values)

parser.add_argument('--foo',action=FooAction,dest='oop')

D:\desktop>python argparseLearn.py --foo 3

Traceback (most recent call last):

File "argparseLearn.py", line 13, in

parser.add_argument('--foo',action=FooAction,dest='opp')

File "D:\python37\lib\argparse.py", line 1353, in add_argument

action = action_class(**kwargs)

File "argparseLearn.py", line 6, in __init__

raise ValueError('name oop is not allowed')

ValueError: name oop is not allowed

参数个数

nargs - 可以指定一个参数可以具体有几个变量

parser.add_argument('--foo',nargs=2)

D:\desktop>python argparseLearn.py --foo 3 2

Namespace(foo=['3', '2'])

当然会出现希望有一个以上以及无数个变量的情况,这时候就需要通配符

+一个变量及以上

?0或1个变量

*0或任意个变量

parser.add_argument('--foo',nargs='+')

D:\desktop>python argparseLearn.py --foo 3 3 3

Namespace(foo=['3', '3', '3'])

argparse.REMAINDER - 可以将可选参数和位置参数之外的参数保存到一起

parser.add_argument('--foo')

parser.add_argument('bar')

parser.add_argument('args', nargs=argparse.REMAINDER)

D:\desktop>python argparseLearn.py --foo 3 9 3 1

Namespace(args=['3', '1'], bar='9', foo='3')

这种情况下,需要将bar的参数3写在后面,否则包括foo都变成可选参数

D:\desktop>python argparseLearn.py 9 --foo 3 3 1

Namespace(args=['--foo', '3', '3', '1'], bar='9', foo=None)

default - 不同于 action='store_const'的不可修改,default在指定默认值的同时,是可以修改的

parser.add_argument('--foo',default=3)

D:\desktop>python argparseLearn.py --foo 32

Namespace(foo='32')

D:\desktop>python argparseLearn.py

Namespace(foo=3)

type - 默认从终端或者程序读取的都是字符串,可以通过type修改类型

parser.add_argument('--foo',type=list)

D:\desktop>python argparseLearn.py --foo 1

Namespace(foo=['1'])

choices - 限制变量只能在choice中

parser.add_argument('--foo', choices=['rock', 'paper', 'scissors'])

D:\desktop>python argparseLearn.py --foo 1

usage: PROG [-h] [--foo {rock,paper,scissors}]

PROG: error: argument --foo: invalid choice: '1' (choose from 'rock', 'paper', 'scissors')

required - 可以通过required将可选参数设定为必须输入变量

parser.add_argument('--foo', required=True)

D:\desktop>python argparseLearn.py

usage: PROG [-h] --foo FOO

PROG: error: the following arguments are required: --foo

metavar - 修改参数需要变量的信息,只是作为显示使用

parser.add_argument('--foo')

D:\desktop>python argparseLearn.py -h

usage: PROG [-h] [--foo FOO]

optional arguments:

-h, --help show this help message and exit

--foo FOO

parser.add_argument('--foo',metavar=('var'))

usage: PROG [-h] [--foo var]

optional arguments:

-h, --help show this help message and exit

--foo var

python argparse_python argparse使用相关推荐

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

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

  2. python的argparse模块

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

  3. Python的argparse

    Python argparse module is the preferred way to parse command line arguments. Parsing command-line ar ...

  4. python遍历argparse的parse_args()

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

  5. python argparse_Python 命令行之旅:初探 argparse

    本文首发于 HelloGitHub 公众号,并发表于 Prodesire 博客. 前言 你是否好奇过在命令行中敲入一段命令后,它是如何被解析执行的?是否考虑过由自己实现一个命令行工具,帮你执行和处理任 ...

  6. python argparse_Python 命令行之旅:argparse、docopt、click 和 fire 总结篇

    本文首发于HelloGitHub公众号,并发表于Prodesire 博客. 一.前言 在近半年的 Python 命令行旅程中,我们依次学习了 argparse.docopt.click 和 fire ...

  7. python找不到自带的argparse_python argparse用法总结

    1. argparse介绍 是python的一个命令行解析包,非常编写可读性非常好的程序 2. 基本用法 prog.py是我在linux下测试argparse的文件,放在/tmp目录下,其内容如下: ...

  8. python argparse_Python 命令行之旅——初探 argparse

    『讲解开源项目系列』启动--让对开源项目感兴趣的人不再畏惧.让开源项目的发起者不再孤单.跟着我们的文章,你会发现编程的乐趣.使用和发现参与开源项目如此简单.欢迎联系我们给我们投稿,让更多人爱上开源.贡 ...

  9. python argparse_Python 命令行之旅:深入 argparse(二)

    本文首发于 HelloGitHub 公众号,并发表于 Prodesire 博客. 前言 在上一篇"深入 argparse(一)"的文章中,我们深入了解了 argparse 的包括参 ...

最新文章

  1. CorelCAD 2020中文版
  2. 怎么测试本地网页在不同分辨率下电脑显示效果_干货:微信小程序测试过程中的各个要点...
  3. Linux Tomcat 安装
  4. C语言中指针的地址和内容
  5. linux3.0-内核自带led驱动移植
  6. Spring Data JPA 从入门到精通~@Version处理乐观锁的问题
  7. 怎么把4399小游戏的代码_25行代码带你爬取4399小游戏数据,看下童年的游戏是否还在...
  8. 蓝桥杯第六届省赛JAVA真题----循环节长度
  9. 作者:徐明泉(1988-),男,百度外卖研发中心架构师。
  10. android 资料文档共享
  11. 企业远程系统UI效果
  12. 2018/3/9 省选模拟赛 0分
  13. exe4j打包后 提示 couldn't load main class
  14. 微带线特性阻抗计算公式_传输线特性阻抗计算方式
  15. 模拟电子技术,电力电子技术
  16. 设置android模拟器的ip地址,安卓模拟器怎么改IP地址和分辨率,怎么改机型
  17. 鲸会务,多场景覆盖数字化会议管家
  18. 用户界面设计实验指导书
  19. 虚拟机VMware下载与安装教程(windows)
  20. [cnblogs镜像]苹果操作系统名称演变史 新名称macOS

热门文章

  1. BSSID,SSID,ESSID区别
  2. Xming X Server 配置和使用
  3. 算法设计与分析基础 第七章谜题
  4. java修饰符总结,关于Java中修饰符的总结(fina除外)
  5. Python计算狄利克雷分布(Dirichlet Distribution)密度估计
  6. android系统华为彩蛋,【小智】打开安卓“隐藏关卡”—— Android系统彩蛋大揭秘...
  7. PySCENIC(三):pyscenic单细胞转录因子分析可视化
  8. 编程Go:return、break、continue
  9. win10自带的edge浏览器,显示‘嗯,我们找不到网页’
  10. zynq 7000 SDK下的流水灯实验