在使用python命令行解析包
argparse
的时候,遇到了
parse_args()
和
parse_known_args()
两种用法,遂查资料搞清楚两个函数的差别并记录。
1
parse_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()
则解决了这个问题。
2 parse_known_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), []) 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']
可以看出,相对于上一条命令多余的东西,以空格为分节符,以字符串的形式存放在列表中。