parse_args()和parse_known_args()的用法和区别

在使用python命令行解析包argparse的时候,遇到了parse_args()parse_known_args()两种用法,遂查资料搞清楚两个函数的差别并记录。

1 parse_args()

直接举例子说明。

  1. 新建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])
    
  2. 在终端输入下面的命令并执行:
    python test.py --flag_int 3
    
    输出结果:
    Namespace(flag_int=3)
    
    可以看出parse_args()函数返回的是一个命名空间(NameSpace),这个NameSpace中有一些变量,就是我们add_argument()的那些参数。
  3. 如果在终端输入下面的命令并执行:
    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()

同样直接用简单的例子说明问题。

  1. 将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])
    
  2. 在终端输入下面的命令并执行:
    python test.py --flag_int 3
    
    输出结果:
    (Namespace(flag_int=3), [])
    Namespace(flag_int=3)
    []
    
    可以看出parse_known_args()返回的是一个有两个元素的元组,第一个元素是NameSpace,和parge_args()返回的NameSpace完全相同,第二个是一个空列表,列表的作用下面可以看出。
  3. 如果在终端输入下面的命令并执行:
    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']
    

可以看出,相对于上一条命令多余的东西,以空格为分节符,以字符串的形式存放在列表中。

你可能感兴趣的:(python,parse_args(),argparse)