在命令行程序中,经常需要获取命令行参数。Python内置的sys.argv
保存了完整的参数列表,我们可以从中解析出需要的参数:
# tesone1.py
import sys
print(sys.argv)
source = sys.argv[1]
target = sys.argv[2]
print(source)
print(target)
执行:
python tesone1.py leizi test
结果:
这种方式能应付简单的参数,但参数稍微复杂点,比如可以使用-d
复制目录,使用--filename *.py
过滤文件名等,解析起来就非常麻烦。
为了简化参数解析,我们可以使用内置的argparse库,定义好各个参数类型后,它能直接返回有效的参数。
argparse定义四个步骤
导入argparse包 ——import argparse
创建一个命令行解析器对象 ——创建 ArgumentParser() 对象
给解析器添加命令行参数 ——调用add_argument() 方法添加参数
解析命令行的参数 ——使用 parse_args() 解析添加的参数
举个栗子
# 导入库
import argparse
# 1. 定义命令行解析器对象
parser = argparse.ArgumentParser(description='Demo of argparse')
# 2. 添加命令行参数
parser.add_argument('--a', type=int, default=30)
parser.add_argument('--b', type=int, default=4)
# 3. 从命令行中结构化解析参数
args = parser.parse_args()
print(args)
epochs = args.a
batch = args.b
print('show {} {}'.format(epochs, batch))
首先我们导入argparse这个包,然后包中的ArgumentParser类生成一个parser对象(其中的description对参数解析器的作用进行描述),当我们在命令行显示帮助信息的时候会看到description描述的信息。
可以执行
python tesone1.py -h
看下结果:
这就是告诉我们这个文件应该怎么用,带什么参数
接着我们通过对象的add_argument函数来增加参数。这里我们增加了训练中常用的a和b参数,最后采用对象的parse_args获取解析的参数.
执行:
python tesone1.py --a 100 --b 1
结果:
1.add_argument() 方法
(1)添加命令行参数
给一个 ArgumentParser 添加程序参数信息,是通过调用 add_argument() 方法完成的。通常,这些调用指定 ArgumentParser 如何获取命令行字符串并将其转换为对象。这些信息在 parse_args() 调用时被存储在ArgumentParser实例化对象中,以供后续使用。add_argument() 方法定义如何解析命令行参数的呢?
(2)add_argument() 方法定义如何解析命令行参数
parser.add_argument(name or flags...[, action][, nargs][, const][, default][, type][,choices][, required][, help][, metavar][, dest])
每个参数解释如下:
2. 解析命令行的参数:parse_args()
ArgumentParser对象通过 parse_args() 方法解析命令行的参数。它将检查命令行中每个参数,转换为适当的数据类型,然后调用相应的操作,并把参数结构化后存放在对象args中。
args = parser.parse_args()
在脚本中,通常 parse_args() 会被不带参数调用,而 ArgumentParser 将自动从 sys.argv 中确定命令行参数。
以上就是这个库的介绍,我们在实际中,也会遇到这个问题,在实际的交付的脚本中,大家不知道怎么使用,在交付的时候,就可以用这个,去出一个教程,大家运行的时候,就知道,这个脚本需要传递的参数类型,内容了,方便大家执行脚本的时候,携带对应的参数。