位置参数介绍¶
add_argument()
方法,该方法用于指定程序能够接受哪些命令行选项
type
表示输入参数的类型
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("square", help="display a square of a given number",
type=int)
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'
当这个程序在收到错误的无效的输入时,它甚至能在执行计算之前先退出,还能显示很有帮助的错误信息。
可选参数介绍¶
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
程序运行情况如下:
- 这一程序被设计为当指定
--verbosity
选项时显示某些东西,否则不显示。 - 不添加这一选项时程序没有提示任何错误而退出,表明这一选项确实是可选的。注意,如果一个可选参数没有被使用时,相关变量被赋值为
None
,在此例中是args.verbosity
,这也就是为什么它在if
语句中被当作逻辑假。 - 帮助信息有点不同。
- 使用
--verbosity
选项时,必须指定一个值,但可以是任何值。
上述例子接受任何整数值作为 --verbosity
的参数,但对于我们的简单程序而言,只有两个值有实际意义: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
程序运行情况如下:
- 现在,这一选项更多地是一个标志,而非需要接受一个值的什么东西。我们甚至改变了选项的名字来符合这一思路。注意我们现在指定了一个新的关键词
action
,并赋值为"store_true"
。这意味着,当这一选项存在时,为args.verbose
赋值为True
。没有指定时则隐含地赋值为False
。 - 当你为其指定一个值时,它会报错,符合作为标志的真正的精神。
- 留意不同的帮助文字。
短选项¶
如果你熟悉命令行的用法,你会发现我还没讲到这一选项的短版本。这也很简单:
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
- 我们带回了一个位置参数,结果发生了报错。
- 注意顺序无关紧要。