在使用python命令行解析包argparse
的时候,遇到了parse_args()
和parse_known_args()
两种用法,遂查资料搞清楚两个函数的差别并记录。
parse_args()
直接举例子说明。
test.py
文件,代码如下:import argparse
parse = argparse.ArgumentParser()
parse.add_argument('--flag_int', type=int, default=2, help='flag_int')
opt1 = parse.parse_args()
print(opt1)
# opt2 = parse.parse_known_args()
# print(opt2)
# print(opt2[0])
# print(opt2[1])
python test.py --flag_int 3
输出结果:Namespace(flag_int=3)
可以看出parse_args()
函数返回的是一个命名空间(NameSpace
),这个NameSpace
中有一些变量,就是我们add_argument()
的那些参数。python test.py --flag_int 3 --flag_float 0.3
可以看到命令比add_argument()
的多了一个参数,当然会报错:usage: test.py [-h] [--flag_int FLAG_INT]
test.py: error: unrecognized arguments: --flag_float 0.3
而parse_known_args()
则解决了这个问题。同样直接用简单的例子说明问题。
import argparse
parse = argparse.ArgumentParser()
parse.add_argument('--flag_int', type=int, default=2, help='flag_int')
# opt1 = parse.parse_args()
# print(opt1)
opt2 = parse.parse_known_args()
print(opt2)
print(opt2[0])
print(opt2[1])
python test.py --flag_int 3
输出结果:(Namespace(flag_int=3), [])
Namespace(flag_int=3)
[]
可以看出parse_known_args()
返回的是一个有两个元素的元组,第一个元素是NameSpace
,和parge_args()
返回的NameSpace
完全相同,第二个是一个空列表,列表的作用下面可以看出。python test.py --flag_int 3 --flag_float 0.3
可以看到命令比add_argument()
的多了一个参数,但是并没有报错,输出结果如下:(Namespace(flag_int=3), ['--flag_float', '0.3'])
Namespace(flag_int=3)
['--flag_float', '0.3']
可以看出,相对于上一条命令多余的东西,以空格为分节符,以字符串的形式存放在列表中。