argparse温和教程 简单快速上手

本文介绍了如何使用Python的argparse模块创建命令行程序,涵盖了位置变量、可选变量(包括默认值)、短选项的使用,以及如何结合它们提供灵活的命令行输入处理。通过实例演示,读者将理解如何定义参数、处理不同类型的数据和设置默认行为。
摘要由CSDN通过智能技术生成

来源

初识

首先建立一个prog.py文件

先从最简单的例子开始,非常简单只有三个语句

import argparse
parser = argparse.ArgumentParser()
parser.parse_args()

然后我们做4个实验,分别在命令行里面执行下面4个语句并观察输出 (注意: $ 开头的是 命令行里需要你输入的内容

$ python3 prog.py
$ python3 prog.py --help
usage: prog.py [-h]

options:
  -h, --help  show this help message and exit
$ python3 prog.py --verbose
usage: prog.py [-h]
prog.py: error: unrecognized arguments: --verbose
$ python3 prog.py foo
usage: prog.py [-h]
prog.py: error: unrecognized arguments: foo

总结

1.在不带任何选项的情况下运行脚本,结果不会向命令行显示任何内容。
2.第二个开始显示argparse模块的有用性。我们几乎什么都没做,但是我们已经得到了一个很好的帮助信息。
3.–help选项,也可以缩写为-h,是我们免费得到的唯一选项(也就是说,不需要指定它)。指定任何其他内容都会导致错误。但即便如此,我们还是可以免费获得有用的使用信息。

位置变量

首先看下面的例子,也很简单 不用害怕

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("echo")
args = parser.parse_args()
print(args.echo)

然后在命令行先来做三次实验

$ python3 prog.py
usage: prog.py [-h] echo
prog.py: error: the following arguments are required: echo
$ python3 prog.py --help
usage: prog.py [-h] echo

positional arguments:
  echo

options:
  -h, --help  show this help message and exit
$ python3 prog.py foo
foo

总结

1.我们调用了add_argument()方法,它用于指定程序愿意接受哪些命令行选项。在本例中,我将其命名为echo
2.现在调用程序需要指定一个选项。比如在终端输入命令的时候需要输入 foo
3.parse_args()方法实际上从指定的选项中返回一些数据,在本例中是echo。
4.该变量是argparse自由执行的某种形式的“魔术”(即不需要指定该值存储在哪个变量中)。您还会注意到,它的名称与方法echo的字符串参数相匹配。( arg.echo = foo)

但是请注意,尽管帮助显示看起来很好,但它目前并没有它可以提供的那么有用。例如,我们看到我们将echo作为一个位置参数,但我们不知道它的作用,只能通过猜测或阅读源代码。所以,让我们让它更有用一点:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("echo", help="echo the string you use here") # 添加说明内容
args = parser.parse_args()
print(args.echo)

然后命令行执行

$ python3 prog.py -h
usage: prog.py [-h] echo

positional arguments:
  echo        echo the string you use here

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

接下来我们在做一个实验

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("square", help="display a square of a given number")
args = parser.parse_args()
print(args.square**2)

执行

$ python3 prog.py 4
Traceback (most recent call last):
  File "prog.py", line 5, in <module>
    print(args.square**2)
TypeError: unsupported operand type(s) for ** or pow(): 'str' and 'int'

结果不太好。这是因为argparse将我们给它的选项作为字符串对待,除非我们告诉它另一个选项。那么,让我们告诉argparse把输入作为一个整数来处理:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("square", help="display a square of a given number",
                    type=int) # 我们添加了一个type 参数
args = parser.parse_args()
print(args.square**2)

然后做两个实验

$ python3 prog.py 4
16
$ python3 prog.py four
usage: prog.py [-h] square
prog.py: error: argument square: invalid int value: 'four'

进行得很顺利。现在,程序在继续之前甚至会很有帮助地退出错误的非法输入。
4 可以从str被转化为int了 ,four 不行就 报错。

可选变量上集

到目前为止,我们一直在讨论位置参数。让我们看看如何添加可选的选项:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--verbosity", help="increase output verbosity")
args = parser.parse_args()
if args.verbosity:
    print("verbosity turned on")

命令行实验

$ python3 prog.py --verbosity 1
verbosity turned on
$ python3 prog.py
$ python3 prog.py --help
usage: prog.py [-h] [--verbosity VERBOSITY]

options:
  -h, --help            show this help message and exit
  --verbosity VERBOSITY
                        increase output verbosity
$ python3 prog.py --verbosity
usage: prog.py [-h] [--verbosity VERBOSITY]
prog.py: error: argument --verbosity: expected one argument

总结

1 这段程序的编写目的是在指定 --verbose时显示某些内容,而在没有指定时不显示任何内容。
2 为了显示该选项实际上是可选的,在没有它的情况下运行程序不会出现错误。注意,默认情况下,如果一个可选参数没有被使用,那么相关的变量,在第二个实验中args.verbosity,它被赋值为None,这就是它未能通过if语句的真值测试的原因。 所以没有输出
3 帮助信息有点不同。他出现的位置是 options
4 实验室说明 当使 使用–verbose选项时,还必须指定某个值,任何值。

可选变量下集

上面的例子接受任意整数,但对于我们的简单程序来说,只有两个值是真正有用的,True或False。让我们相应地修改代码:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--verbose", help="increase output verbosity",
                    action="store_true") # 这里修改了
args = parser.parse_args()
if args.verbose:
    print("verbosity turned on")

实验

$ python3 prog.py --verbose
verbosity turned on
$ python3 prog.py --verbose 1
usage: prog.py [-h] [--verbose]
prog.py: error: unrecognized arguments: 1
$ python3 prog.py --help
usage: prog.py [-h] [--verbose]

options:
  -h, --help  show this help message and exit
  --verbose   increase output verbosity

总结

1 该选项现在更像是一个标志,而不是需要值的东西。我们甚至改变了选项的名称来匹配这个想法。注意,我们现在指定了一个新的关键字action,并给它赋值“store_true”。这意味着,如果指定了该选项,则将值True赋给args.verbose。不指定意味着False。

2.当你指定一个值时,它会报错 因为它不需要赋值
3 注意帮助文本不一样了。

短选项

如果您熟悉命令行用法,您会注意到我还没有涉及选项的简短版本的主题。很简单:

代码

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-v", "--verbose", help="increase output verbosity",
                    action="store_true")
args = parser.parse_args()
if args.verbose:
    print("verbosity turned on")

命令行实验

$ python3 prog.py -v
verbosity turned on
$ python3 prog.py --help
usage: prog.py [-h] [-v]

options:
  -h, --help     show this help message and exit
  -v, --verbose  increase output verbosity

你们已经可以自己总结出来了把!

结合位置变量和可选变量

我们的程序越来越复杂:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("square", type=int,
                    help="display a square of a given number")
parser.add_argument("-v", "--verbose", action="store_true",
                    help="increase output verbosity")
args = parser.parse_args()
answer = args.square**2
if args.verbose:
    print(f"the square of {args.square} equals {answer}")
else:
    print(answer)

实验

$ python3 prog.py
usage: prog.py [-h] [-v] square
prog.py: error: the following arguments are required: square
$ python3 prog.py 4
16
$ python3 prog.py 4 --verbose
the square of 4 equals 16
$ python3 prog.py --verbose 4
the square of 4 equals 16

忘记了给位置变量赋值 所以报错了
此时注意顺序并不重要。

让可选变量重新可以接受int类型:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("square", type=int,
                    help="display a square of a given number")
parser.add_argument("-v", "--verbosity", type=int,
                    help="increase output verbosity")
args = parser.parse_args()
answer = args.square**2
if args.verbosity == 2:
    print(f"the square of {args.square} equals {answer}")
elif args.verbosity == 1:
    print(f"{args.square}^2 == {answer}")
else:
    print(answer)

实验

$ python3 prog.py 4
16
$ python3 prog.py 4 -v
usage: prog.py [-h] [-v VERBOSITY] square
prog.py: error: argument -v/--verbosity: expected one argument
$ python3 prog.py 4 -v 1
4^2 == 16
$ python3 prog.py 4 -v 2
the square of 4 equals 16
$ python3 prog.py 4 -v 3
16

我们可以限制verbosity 的输入范围

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("square", type=int,
                    help="display a square of a given number")
parser.add_argument("-v", "--verbosity", type=int, choices=[0, 1, 2],
                    help="increase output verbosity")
args = parser.parse_args()
answer = args.square**2
if args.verbosity == 2:
    print(f"the square of {args.square} equals {answer}")
elif args.verbosity == 1:
    print(f"{args.square}^2 == {answer}")
else:
    print(answer)

实验

$ python3 prog.py 4 -v 3
usage: prog.py [-h] [-v {0,1,2}] square
prog.py: error: argument -v/--verbosity: invalid choice: 3 (choose from 0, 1, 2)
$ python3 prog.py 4 -h
usage: prog.py [-h] [-v {0,1,2}] square

positional arguments:
  square                display a square of a given number

options:
  -h, --help            show this help message and exit
  -v {0,1,2}, --verbosity {0,1,2}
                        increase output verbosity

关键字 default

关键字还很多 查一下就知道了

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("square", type=int,
                    help="display a square of a given number")
parser.add_argument("-v", "--verbosity",  default=0,
                    help="increase output verbosity")
args = parser.parse_args()
answer = args.square**2
if args.verbosity >= 2:
    print(f"the square of {args.square} equals {answer}")
elif args.verbosity >= 1:
    print(f"{args.square}^2 == {answer}")
else:
    print(answer)

实验

$ python3 prog.py 4
16

到这里 最核心的部分就结束了 其实基本项目里面都是可选变量

浓缩下使用流程就3步

  1. 创建对象
  2. 调用方法添加变量 从终端给变量赋值
  3. 调用方法 返回类似字典的变量

在这里插入图片描述

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值