python-argparse模块解析

命令行解析——方法1.python中的命令行解析最简单最原始的方法是使用sys.argv来实现

                         方法2.更高级的可以使用argparse这个模块

功能:argparse是python的命令行解析工具,或者说可以在python代码中调用shell的一些命令,从而简化和系统命令之间的交互。 tensorflow的一些例子中用argparse来定义一些默认命令,通常是全局变量,也是用作和系统命令之间交互的全局设置。

目录

 

步骤

1、导入argparse模块

2、创建解析器对象ArgumentParser,可以添加参数。

3、add_argument()方法,用来指定程序需要接受的命令参数

4、parser.parse_args()    进行解析

5. 指定可选参数

6. 设定无需具体值参数

7. 设定参数的简短形式

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

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

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

11. 设置参数的默认值

12 设置冲突参数


步骤

1、导入argparse模块

           import argparse

2、创建解析器对象ArgumentParser,可以添加参数。

            description:描述程序
           parser=argparse.ArgumentParser(description="This is a example program ")
           add_help:默认是True,可以设置False禁用

3、add_argument()方法,用来指定程序需要接受的命令参数

ArgumentParser.add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])

参数:

  • name or flags - 选项字符串的名字或者列表,例如 foo 或者 -f, --foo。
  • action - 命令行遇到参数时的动作,默认值是 store。
    • store_const,表示赋值为const;
    • append,将遇到的值存储成列表,也就是如果参数重复则会保存多个值;
    • append_const,将参数规范中定义的一个值保存到一个列表;
    • count,存储遇到的次数;此外,也可以继承 argparse.Action 自定义参数解析;
  • nargs - 应该读取的命令行参数个数,可以是具体的数字,或者是?号,当不指定值时对于 Positional argument 使用 default,对于 Optional argument 使用 const;或者是 * 号,表示 0 或多个参数;或者是 + 号表示 1 或多个参数。
  • const - action 和 nargs 所需要的常量值。
  • default - 不指定参数时的默认值。
  • type - 命令行参数应该被转换成的类型。
  • choices - 参数可允许的值的一个容器。
  • required - 可选参数是否可以省略 (仅针对可选参数)。
  • help - 参数的帮助信息,当指定为 argparse.SUPPRESS 时表示不显示该参数的帮助信息.
  • metavar - 在 usage 说明中的参数名称,对于必选参数默认就是参数名称,对于可选参数默认是全大写的参数名称.
  • dest - 解析后的参数名称,默认情况下,对于可选参数选取最长的名称,中划线转换为下划线.

4、parser.parse_args()    进行解析

具体例子:

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

1. 命令行程序框架

代码如下:

import argparse

parser = argparse.ArgumentParser(description="程序的主要功能是...")

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. 添加一个位置参数

代码如下:


import argparse

parser = argparse.ArgumentParser()

parser.add_argument("echo")

args = parser.parse_args()

print('参数echo的值是{}'.format(args.echo))

    执行结果:  参数echo的值是hello

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

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

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

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

3. 为位置参数添加说明


import argparse

parser = argparse.ArgumentParser()

parser.add_argument("echo", help="我是关于echo的说明")

args = parser.parse_args()

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. 指定参数类型


import argparse

parser = argparse.ArgumentParser()

parser.add_argument("square", type=int)

args = parser.parse_args()

print(args.square**2)

执行代码:

python 1.py 123

 执行结果:

15129

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

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

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

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

5. 指定可选参数

先看代码:


import argparse

parser = argparse.ArgumentParser()

parser.add_argument("--verbosity")

args = parser.parse_args()

print('可选参数verbosity的值是{}'.format(args.verbosity))

 

执行代码:

python 1.py --verbosity 123

执行结果:

可选参数verbosity的值是123

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

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

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

python 1.py

则执行结果为:

可选参数verbosity的值是None

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

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

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

6. 设定无需具体值参数

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

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

代码如下:


import argparse

parser = argparse.ArgumentParser()

parser.add_argument("--verbose", action="store_true")

args = parser.parse_args()

print("参数verbose的值是{}".format(args.verbose))

执行代码:

python 1.py --verbose

执行结果:

参数verbose的值是True

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

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

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

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

7. 设定参数的简短形式

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

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

代码为:

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

 

执行代码:

python 1.py -v

执行结果:

参数verbose的值是True

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

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

代码如下:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("square", type=int)
parser.add_argument("-v", "--verbose", action="store_true")
args = parser.parse_args()
if args.verbose:
   print("the square of {} equal{}".format(args.square,args.square**2))
else: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. 为可选参数设置取值范围

代码为:

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

多次不同方式执行代码: 

 python 1.py
可选参数verbosity的值为None
 python 1.py -v 1
可选参数verbosity的值为1
 python 1.py -v 2
可选参数verbosity的值为2
 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. 监控可选参数的执行次数

代码如下:

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

 

以不同方式多次执行:

 python 1.py -v
可选参数verbosity的值为1
 python 1.py -vv
可选参数verbosity的值为2
 python 1.py -vvv
可选参数verbosity的值为3
 python 1.py -vvvv
可选参数verbosity的值为4
 python 1.py -vvvvv
可选参数verbosity的值为5
 python 1.py
可选参数verbosity的值为None

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

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

11. 设置参数的默认值

代码为:

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

不同方式多次执行:

python 1.py
可选参数verbosity的值为0
python 1.py -v 100
可选参数verbosity的值为100

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

12 设置冲突参数

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

代码如下:

import argparse
parser = argparse.ArgumentParser()
group = parser.add_mutually_exclusive_group()
group.add_argument("-v", "--verbose", action="store_true")
group.add_argument("-q", "--quiet", action="store_true")
args = parser.parse_args()
print("可选参数verbosity的值为{}".format(args.verbose))
print("可选参数quiet的值为{}".format(args.quiet))

不同方式多次执行: 

 python 1.py
可选参数verbosity的值为False
可选参数quiet的值为False
 python 1.py -v
可选参数verbosity的值为True
可选参数quiet的值为False
 python 1.py -q
可选参数verbosity的值为False
可选参数quiet的值为True
 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
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值