argparse
模块是标准库中最大的模块之一,拥有大量的配置选项。 本章只是演示了其中最基础的一些特性。
一、基本步骤
为了解析命令行选项
你首先要创建一个 ArgumentParser
实例, 并使用 add_argument()
方法声明你想要支持的选项。
没用的示例
必须创建一个py 文件 prog.py
, 并写入如下内容
import argparse
parser = argparse.ArgumentParser()
parser.parse_args()
试着在命令行里执行如下代码
$ python3 prog.py --help
usage: prog.py [-h]
optional arguments:
-h, --help show this help message and exit
可以看到,即使没有做太多设置,这个脚本已经实现了命令行工具了,并且默认就会有
--help
参数。
--help
也可以简写为-h
二、添加必须的位置参数
位置参数就是,必须为程序提供的,并且不需要使用 -
和 --
。
继续编辑我们的 prog.py
文件。
这次我们可以使用实例的 add_argument()
函数来添加一个位置参数。
这个位置参数是必须的,不给其传参,将会抛出一个错误提示。
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("show")
args = parser.parse_args()
print(args.show)
上面的代码中, 字符串的 'show' 被传给
add_argument()
方法。
最后他会变成实例的一个属性,用来接收在命令行里传入的实际的值。
最后一行我们打印了这个属性,也就可以实现打印出命令行里传入的实际的值了。
我们来执行一下
$ python3 prog.py hello
hello
这个时候使用 --help
,你会发现帮助信息并没有表明目前的这个位置参数是用来做什么的。
$ python3 prog.py --help
usage: prog.py [-h] show
positional arguments:
show
optional arguments:
-h, --help show this help message and exit
所以,接下来我们就来添加位置参数的帮助信息
使用 help
默认参数 添加帮助信息
$ cat prog.py
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("show", help="打印出你输入的字符串")
args = parser.parse_args()
print(args.show)
再次执行,会看到我们添加的帮助信息
$ python3 prog.py -h
usage: prog.py [-h] show
positional arguments:
show 打印出你输入的字符串
optional arguments:
-h, --help show this help message and exit
添加更多的逻辑
我们可以在执行了 parser.parse_args()
之后,添加更多的逻辑,用于实现更多的功能。
比如,下面的示例计算 2
的任意次方。
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("square",
type=int,
help="打印出 2 的幂值, 要求传入一个整数")
args = parser.parse_args()
print(2 ** args.square)
这里因为是算术运算,所以需要用
type=int
把传入的参数声明为整型,这样接收到参数后模块内部会自动转换为整型。
执行结果如下:
$ python3 power.py 4
16
实战-制作一个 copy
命令行工具
为了展示位置参数(Positional arguments),下面写一个cp.py
,实现简单的文件复制功能。
import argparse
import shutil
def _parse_args():
parser = argparse.ArgumentParser()
parser.add_argument(
"source",
help="指定要复制的文件,支持相对路径和绝对路径",
)
parser.add_argument(
"target",
help="指定要复制的路径,包括拷贝后的文件名",
)
return parser.parse_args()
if __name__ == '__main__':
args = _parse_args()
shutil.copy(src=args.source, dst=args.target)
cp.py
命令后,第一个参数被识别为source
,第二个参数被识别为target
,然后执行复制。
如果执行python cp.py cp.py cp2.py
,那么不会有任何显示信息,说明成功执行复制操作。
如果多一个或者少一个参数呢?
$ python3 cp.py one.py
usage: cp.py [-h] source target
cp.py: error: the following arguments are required: target
$ python3 cp.py one.py two.py three.py
usage: cp.py [-h] source target
cp.py: error: unrecognized arguments: three.py
这就比直接使用sys.argv
的可靠性要高多了。
注意这里并没有对源文件是否存在进行检测。
三、可选参数
可选参数就是可有可无的参数,一般用 -
或者 --
表示。
可选参数就是需要使用 -
或者 --
后面紧跟的是一个关键字。比如 -h
也称为短参数 ,--help
也称为长参数。
这个两种可以同时存在于程序中,也可以只出现一种。
让我们继续改写 cp.py
程序,让其具有查看版本的参数 -v
和 --version
。
import argparse
import shutil
def _parse_args():
parser = argparse.ArgumentParser()
parser.add_argument(
"source",
help="指定要复制的文件,支持相对路径和绝对路径",
)
parser.add_argument(
"target",
help="指定要复制的路径,包括拷贝后的文件名",
)
parser.add_argument(
'-v',
'--version',
action='version', # 遇到参数时的动作,默认值 store
version='%(prog)s 1.1', ## 实际打印出来的内容
help='查看程序版本',
)
return parser.parse_args()
if __name__ == '__main__':
args = _parse_args()
shutil.copy(src=args.source, dst=args.target)
$ python3 cp.py -v
cp.py 1.1
网友评论