一、基础
import argparse
parser = argparse.ArgumentParser()
parser.parse_args()
运行程序
$ 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
optional arguments:
-h, --help show this help message and exit
$ python3 prog.py foo
foo
- 在没有任何选项的情况下运行脚本不会在标准输出显示任何内容。这没有什么用处。
- 第二行代码开始展现出
argparse
模块的作用。我们几乎什么也没有做,但已经得到一条很好的帮助信息。 --help
选项,也可缩写为-h
,是唯一一个可以直接使用的选项(即不需要指定该选项的内容)。指定任何内容都会导致错误。即便如此,我们也能直接得到一条有用的用法信息。
二、位置参数
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("echo")
args = parser.parse_args()
print(args.echo)
- 增加了
add_argument()
方法,该方法用于指定程序能够接受哪些命令行选项。在这个例子中,我将选项命名为echo
,与其功能一致。 - 现在调用我们的程序必须要指定一个选项。
- The
parse_args()
method actually returns some data from the options specified, in this case,echo
. - 这一变量是
argparse
免费施放的某种 “魔法”(即是说,不需要指定哪个变量是存储哪个值的)。你也可以注意到,这一名称与传递给方法的字符串参数一致,都是echo
。
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("echo", help="echo the string you use here")
args = parser.parse_args()
print(args.echo)
positional arguments:
echo echo the string you use here
进一步:
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)
Traceback (most recent call last):
File "prog.py", line 5, in <module>
print(args.square**2)
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)
三、可选参数
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--verbosity", help="increase output verbosity")
args = parser.parse_args()
if args.verbosity:
print("verbosity turned on")
-
这一程序被设计为当指定
--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")
- 这一选项更多地是一个标志,而非需要接受一个值的什么东西。我们甚至改变了选项的名字来符合这一思路。注意我们现在指定了一个新的关键词
action
,并赋值为"store_true"
。这意味着,当这一选项存在时,为args.verbose
赋值为True
。没有指定时则隐含地赋值为False
。 - 当你为其指定一个值时,它会报错,符合作为标志的真正的精神。
参考文献:
https://docs.python.org/zh-cn/3.7/howto/argparse.html