zoukankan      html  css  js  c++  java
  • argparse模块入门介绍——基于python3.7

    转载: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

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

  • 相关阅读:
    httpd设置HTTPS双向认证
    crossdomain.xml的配置详解
    hibernate中的merge()方法
    解决java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver问题
    oracle自定义函数:将使用点分隔符的编码转成层级码格式的编码
    jsp页面科学计数法显示问题的解决办法
    javascript检索某个字符或字符串在源字符串中的位置(下标)
    webwork遍历数组标签
    过多得操作DOM会降低WEB应用的性能
    vue中$refs的用法及作用详解
  • 原文地址:https://www.cnblogs.com/happystudyeveryday/p/10729598.html
Copyright © 2011-2022 走看看