转载:https://blog.csdn.net/weixin_41796207/article/details/80846406

首先说明,本人是想要学习如何使用argparse模块,打造命令行程序。

但是网络上的各种教程写的只能说是惨不忍睹,反人类来形容。这样的文章写出来纯粹浪费大家时间。

找了很久,找到了python官方推荐的入门教程,看下来非常好。但是没有中文版。

本人尝试根据该教程,将argparse的核心使用方法做一介绍。

注:代码均命名为 1.py.

1. 命令行程序框架

代码如下:

  1.  
    import argparse
  2.  
    parser = argparse.ArgumentParser(description="程序的主要功能是...")
  3.  
    parser.parse_args()

执行代码:

python 1.py --help

执行结果:

usage: 1.py [-h]

程序的主要功能是...

optional arguments:
-h, --help show this help message and exit

--help选项就是将命令行参数说一个说明。

-h 是 --help的缩写形式,二者效果相同。

如程序中展示的,可以通过description参数来对程序的主要功能做出说明。

2. 添加一个位置参数

代码如下:

  1.  
    import argparse
  2.  
    parser = argparse.ArgumentParser()
  3.  
    parser.add_argument("echo")
  4.  
    args = parser.parse_args()
  5.  
    print('参数echo的值是{}'.format(args.echo))

执行代码:

python 1.py 'hello'

执行结果:

参数echo的值是hello

以上代码就是添加一个参数,存储在名字为'echo'的变量里面。

注意,要获取变量的值,需要先通过parse_args()方法获取args对象。

所以命令行信息都可以通过args对象取值获得。

注意,由于这里指定了位置参数,也就是说,如果执行程序时没有携带参数,则会报错。

执行代码:

python 1.py 'hello'
执行结果:
usage: 1.py [-h] echo
1.py: error: the following arguments are required: echo

3. 为位置参数添加说明

代码如下:

  1.  
    import argparse
  2.  
    parser = argparse.ArgumentParser()
  3.  
    parser.add_argument("echo", help="我是关于echo的说明")
  4.  
    args = parser.parse_args()
  5.  
    print('参数echo的值是{}'.format(args.echo))

执行-h选项:

python 1.py -h

执行结果:

positional arguments:
echo 我是关于echo的说明 optional arguments:
-h, --help show this help message and exit

可以看见,-h的执行结果中,已经打印了代码中为位置参数echo添加的说明。

4. 指定参数类型

代码如下:

  1.  
    import argparse
  2.  
    parser = argparse.ArgumentParser()
  3.  
    parser.add_argument("square", type=int)
  4.  
    args = parser.parse_args()
  5.  
    print(args.square**2)

执行代码:

python 1.py 123

执行结果:

15129

注意这里的代码指定了一个位置参数square,并且指定类型为int。

默认情况下,如果没有指定类型,argparse会将参数作为字符串存储。

也就是说,,如果没有指定类型,args.square的值是字符串'123'。

此时,在执行 args.square**2 的操作时,会报错。

5. 指定可选参数

先看代码:

  1.  
    import argparse
  2.  
    parser = argparse.ArgumentParser()
  3.  
    parser.add_argument("--verbosity")
  4.  
    args = parser.parse_args()
  5.  
    print('可选参数verbosity的值是{}'.format(args.verbosity))

执行代码:

python 1.py --verbosity 123

执行结果:

可选参数verbosity的值是123

注意,在参数前加上前缀--,即意味着这个参数是可选参数。

可选参数与位置参数有两点不同:

第一,可选参数可以不指定,如果这样执行代码:

python 1.py

则执行结果为:

可选参数verbosity的值是None

注意此时的,verbosity的值是None。

第二点不同,可选参数使用时,需要先声明该参数,再指定该参数的值。

正如上面代码中使用的那样。读者可以自行体会。

6. 设定无需具体值参数

比如说我们想要设定一个参数,如果指定了该参数,就执行一个功能,

如果没指定,则不执行。具体该参数的值是多少在所不问。

代码如下:

  1.  
    import argparse
  2.  
    parser = argparse.ArgumentParser()
  3.  
    parser.add_argument("--verbose", action="store_true")
  4.  
    args = parser.parse_args()
  5.  
    print("参数verbose的值是{}".format(args.verbose))

执行代码:

python 1.py --verbose

执行结果:

参数verbose的值是True

可以看到,在执行代码时,指定了可选参数--verbose,但是没有指定verbose的值。

此时verbose的值就默认为布尔值True。

实现这一目的的方法是将action参数的值指定为 "store_true"。

通过这个特点,就可以实现使用某一个特定功能这个目的。

7. 设定参数的简短形式

上面我们可以注意到,-h 是 --help 和简单形式,二者功能相同。

我们也可以为自己设定的参数指定简短的形式。

代码为:

  1.  
    import argparse
  2.  
    parser = argparse.ArgumentParser()
  3.  
    parser.add_argument("-v","--verbose", action="store_true")
  4.  
    args = parser.parse_args()
  5.  
    print("参数verbose的值是{}".format(args.verbose))

执行代码:

python 1.py -v

执行结果:

参数verbose的值是True

说明,在可选参数前添加一个简短的参数,与直接使用原参数效果相同。

8. 同时添加位置参数和可选参数

代码如下:

  1.  
    import argparse
  2.  
    parser = argparse.ArgumentParser()
  3.  
    parser.add_argument("square", type=int)
  4.  
    parser.add_argument("-v", "--verbose", action="store_true")
  5.  
    args = parser.parse_args()
  6.  
     
  7.  
    if args.verbose:
  8.  
    print("the square of {} equals {}".format(args.square, args.square**2))
  9.  
    else:
  10.  
    print(args.square**2)

执行方式1:

python 1.py 50

执行结果1:

2500

执行方式2:

python 1.py 50 -v

执行结果2:

the square of 50 equals 2500

通过多次使用add_argument方法,来添加多个命令行参数。

9. 为可选参数设置取值范围

代码为:

  1.  
    import argparse
  2.  
    parser = argparse.ArgumentParser()
  3.  
     
  4.  
    parser.add_argument("-v", "--verbosity", type=int, choices=[0, 1, 2])
  5.  
    args = parser.parse_args()
  6.  
     
  7.  
    print("可选参数verbosity的值为{}".format(args.verbosity))

多次不同方式执行代码:

MacBook-Pro:Desktop yao$ python 1.py
可选参数verbosity的值为None
MacBook-Pro:Desktop yao$ python 1.py -v 1
可选参数verbosity的值为1
MacBook-Pro:Desktop yao$ python 1.py -v 2
可选参数verbosity的值为2
MacBook-Pro:Desktop yao$ python 1.py -v 3
usage: 1.py [-h] [-v {0,1,2}]
1.py: error: argument -v/--verbosity: invalid choice: 3 (choose from 0, 1, 2)

说明,通过设置choices属性,来设置可选参数的取值范围。

如果不在取值范围内的话,会报错。

10. 监控可选参数的执行次数

代码如下:

  1.  
    import argparse
  2.  
    parser = argparse.ArgumentParser()
  3.  
     
  4.  
    parser.add_argument("-v", "--verbosity", action="count")
  5.  
    args = parser.parse_args()
  6.  
     
  7.  
    print("可选参数verbosity的值为{}".format(args.verbosity))

以不同方式多次执行:

MacBook-Pro:Desktop yao$ python 1.py -v
可选参数verbosity的值为1
MacBook-Pro:Desktop yao$ python 1.py -vv
可选参数verbosity的值为2
MacBook-Pro:Desktop yao$ python 1.py -vvv
可选参数verbosity的值为3
MacBook-Pro:Desktop yao$ python 1.py -vvvv
可选参数verbosity的值为4
MacBook-Pro:Desktop yao$ python 1.py -vvvvv
可选参数verbosity的值为5
MacBook-Pro:Desktop yao$ python 1.py
可选参数verbosity的值为None

说明,通过设置action属性值为 'count' ,可以监控使用了多少次可选参数。

读者可自行根据执行结果感受该参数的作用。

11. 设置参数的默认值

代码为:

  1.  
    import argparse
  2.  
    parser = argparse.ArgumentParser()
  3.  
     
  4.  
    parser.add_argument("-v", "--verbosity", default=0)
  5.  
    args = parser.parse_args()
  6.  
     
  7.  
    print("可选参数verbosity的值为{}".format(args.verbosity))

不同方式多次执行:

MacBook-Pro:Desktop yao$ python 1.py
可选参数verbosity的值为0
MacBook-Pro:Desktop yao$ python 1.py -v 100
可选参数verbosity的值为100

注意此时的默认值为0,而不是None

12 设置冲突参数

冲突参数是指,两个参数只能二选其一。

代码如下:

  1.  
    import argparse
  2.  
     
  3.  
    parser = argparse.ArgumentParser()
  4.  
    group = parser.add_mutually_exclusive_group()
  5.  
    group.add_argument("-v", "--verbose", action="store_true")
  6.  
    group.add_argument("-q", "--quiet", action="store_true")
  7.  
     
  8.  
    args = parser.parse_args()
  9.  
     
  10.  
    print("可选参数verbosity的值为{}".format(args.verbose))
  11.  
    print("可选参数quiet的值为{}".format(args.quiet))

不同方式多次执行:

MacBook-Pro:Desktop yao$ python 1.py
可选参数verbosity的值为False
可选参数quiet的值为False
MacBook-Pro:Desktop yao$ python 1.py -v
可选参数verbosity的值为True
可选参数quiet的值为False
MacBook-Pro:Desktop yao$ python 1.py -q
可选参数verbosity的值为False
可选参数quiet的值为True
MacBook-Pro:Desktop yao$ python 1.py -v -q
usage: 1.py [-h] [-v | -q]
1.py: error: argument -q/--quiet: not allowed with argument -v/--verbose
MacBook-Pro:Desktop yao$ python 1.py -h
usage: 1.py [-h] [-v | -q] optional arguments:
-h, --help show this help message and exit
-v, --verbose
-q, --quiet

请读者根据执行结果自行思考冲突参数的设置以及特点。

argparse模块入门介绍——基于python3.7的更多相关文章

  1. Nodejs基础:stream模块入门介绍与使用

    本文摘录自<Nodejs学习笔记>,更多章节及更新,请访问 github主页地址.欢迎加群交流,群号 197339705. 模块概览 nodejs的核心模块,基本上都是stream的的实例 ...

  2. Python 基于python操纵redis入门介绍

    基于python操纵redis入门介绍 by:授客  QQ:1033553122 测试环境 redis-3.0.7 CentOS 6.5-x86_64 python 3.3.2 基于Python操作R ...

  3. 基于python3.x,使用Tornado中的torndb模块操作数据库

    目前Tornado中的torndb模块是不支持python3.x,所以需要修改部分torndb源码即可正常使用 1.开发环境介绍 操作系统:win8(64位),python版本:python3.6(3 ...

  4. 基于Metronic的Bootstrap开发框架--工作流模块功能介绍(2)

    本篇继续<基于Metronic的Bootstrap开发框架--工作流模块功能介绍>,继续介绍基于Metronic的Bootstrap开发框架的工作模块功能,介绍工作流模块中相关业务表单的界 ...

  5. 基于Metronic的Bootstrap开发框架--工作流模块功能介绍

    在很早之前的随笔里面,已经介绍了WInform框架中工作流模块的功能,不过由于工作流模块中界面处理部分比较麻烦,一直没有在Bootstrap框架中进行集成,最近由于项目的关系,花了不少精力,把工作流模 ...

  6. Python的Argparse模块是什么?(未完)

            近日在阅读代码的过程中遇到了Argparse模块,记得前段时间已经看了,可是过了两周现在又忘了, 看来写代码一定要钻研到底搞清楚其中原委才行,本文主要参考Python3.6系列官方文档 ...

  7. Python入门介绍

    Python入门介绍(人生苦短,我用 Python) Python简介 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹 ...

  8. Python的Argparse模块是什么?

            近日在阅读代码的过程中遇到了Argparse模块,记得前段时间已经看了,可是过了两周现在又忘了, 看来写代码一定要钻研到底搞清楚其中原委才行,本文主要参考Python3.6系列官方文档 ...

  9. [Python爬虫] scrapy爬虫系列 <一>.安装及入门介绍

    前面介绍了很多Selenium基于自动测试的Python爬虫程序,主要利用它的xpath语句,通过分析网页DOM树结构进行爬取内容,同时可以结合Phantomjs模拟浏览器进行鼠标或键盘操作.但是,更 ...

随机推荐

  1. HDU 1756 Cupid's Arrow( 判断点在多边形的内外 )

    链接:传送门 思路:判断每支箭是否在多边形内,计算几何点定位中水题,不清楚下面的代码能不能适用于给定点的顺序不确定( 既不是顺时针又不是逆时针 ) /************************* ...

  2. Windows 10快速在指定目录打开命令行

    一.我们在想要到达的目录上按住shift键并点击鼠标右键.看到了吗,这时候在弹出菜单里多了一个选项,就是"在此处打开命令窗口",我们点开看一下. 二.不过有时候我们需要以管理员的权 ...

  3. python实战之编码问题:中文!永远的痛

    编码的思维图谱: 也就是说文件没有编码之说,事实上都是按二进制格式保存在硬盘中的.不过在写入读取时须使用相应的编码进行处理,以便操作系统配合相关软件/字体,绘制到屏幕中给人看.所以关键问题是得知道原先 ...

  4. VS 2013+Qt 5.4.1

    Qt应用能够用Qt Creator开发,也能够使用Visual Studio. 我之前一直用Qt Creator.也始终认为这是最好的选择.只是有人偏爱Visual Studio,我也由于工作须要,要 ...

  5. leveldb学习:sstable(2)

    block写入:block_builder block.h和.cc里定义了block的entry存储格式和restart,提供了entry的查找接口以及迭代器.那么怎样往写block里写entry呢? ...

  6. iOS 自己主动登录,登录过程中一直显示载入页

    iOS开发中 假设client做的人性化一点肯定会考虑自己主动登录 事实上原理非常easy,就是再首次登录成功之后将username和password存入userdefault 下次登录的时候推断us ...

  7. Codeforce 163 A. Substring and Subsequence DP

    A. Substring and Subsequence   One day Polycarpus got hold of two non-empty strings s and t, consist ...

  8. yolo环境配置

    主要配置参考官网https://pjreddie.com/darknet/yolo/ 为了能够可视化,另安装cuda+opencv cuda版本为9.0 opencv版本为3.1.0 先安装cuda再 ...

  9. 超便携式截屏录屏软件FastStone Capture

    超便携式截屏录屏软件FastStone Capture

  10. ES索引模板——就是在新建索引时候指定的正则匹配来设置mapping而已,对于自动扩容有用

    索引模板 扩容设计 » 索引模板 Elasticsearch 不要求你在使用一个索引前创建它. 对于日志记录类应用,依赖于自动创建索引比手动创建要更加方便. Logstash 使用事件中的时间戳来生成 ...