zoukankan      html  css  js  c++  java
  • python学习笔记6:命令行参数

    1. 使用步骤

    使用步骤如下:

    # 导入模块  
    import argparse  
      
    # 获取parser, description文本会显示在help信息中  
    parser = argparse.ArgumentParser(description='args discrip')  
      
    # 添加选项, 具体选项类型见后面各节  
    parser.add_argument('-a')  
      
    # 解析选项  
    args = parser.parse_args(sys.argv[1:])  
      
    # 使用选项  
    print(args.a)  
    

    对sys.argv[1:]的说明:

    sys.argv         # 一个列表,存储命令行参数.  
    sys.argv[0]      # 脚本名.  
    sys.argv[1:]     # 命令行参数.  
    sys.argv[1][2:]  # 截取第一个参数第2bit之后的内容;  
    

    2. 位置参数

    # 位置参数可以实现类似于vcs a.v b.v的选项处理,   
    # 如下例, vfiles是位置参数,不需要使用'-vfile 或者-xx'这种形式指定选项内容;  
    #         default=[] 表示默认参数为空list;  
    #         nargs='*'  表示可以是0个或多个参数;  
    >>> parser.add_argument('vfiles', type=str,default=[], nargs='*')  
    _StoreAction(optine_strings=[], dest='vfiles', nargs='*', const=None, default=[], Type=<class 'str'>, choices=None, help=None, metavar=None)  
    

    3. flag类型的选项(选项本身无参数)

    flag类型选项本身无参数, 根据"命令行是否有该选项" 和 "该选项声明值/默认值" 来决定选项实际值(注意, 并不是声明选项, 则该选项为True, 不声明为False, 而是内部可配置):

    >>> parser.add_argument(  
    ...     '-a',                # 选项名称  
    ...     action='store_true', # 如果声明-a, 则a=True;  
    ...     default=False        # 如果不声明(默认)-a, 则a=False;  
    ... )  
    _StoreTrueAction(optine_strings=['-a'], dest='a', nargs=0, const=True, default=False, Type=None, choices=None, help=None, metavar=None)  
      
    >>>   
    >>> parser.add_argument(  
    ...     '-b',   
    ...     '--b_long_opt',       # b有额外的长选项名称: --b_long_opt  
    ...     action='store_false', # 如果声明-b, 则b=False  
    ...     default=True,         # 如果不声明(默认)-b, 则b=True  
    ...     dest='b_new_name'     # 内部使用b_new_name取用该选项(而不能使用b)  
    )  
    _StoreTrueAction(optine_strings=['-b', '--b_long_opt'], dest='b_new_name', nargs=0, const=False, default=True, Type=None, choices=None, help=None, metavar=None)  
    

    注意,不会有以下两种情况,因为这两种情况下,无论选项是否定义,内部得到的值都一样,没有意义;

    >>> # action='store_true', default=True,声明选项和默认值都是True  
    >>> # action='store_false', default=False,声明选项和默认值都是False  
    

    通过parse一个内部数组来进行验证,实际使用中是parse真正的命令行数组sys.argv[1:], 注意sys.argv[0]表示的是脚本名称;

    测试1:#-a -b都没声明,所以都是default值

    >>> lst_args=[]  
    >>> args = parser.parse_args(lst_args)  
    >>> args.a          # 未声名-a,所以args.a的值为default值False;  
    False  
    >>> args.b_new_name # 未声名-b,所以args.b_new_name值为默认值True;  
    True  
    >>> args.b  # 由于使用了dest, 所以args.b会报错, 只能使用args.b_new_name获取 
    AttributeError: 'Namespace' object has no sttribute 'b'  
    

    测试2:-a -b都声明,所以都是action store值

    >>> lst_args=['-ab'] # -a和-b是短选项, 可以合并使用'-ab'表示'-a' '-b'  
    >>> args = parser.parse_args(lst_args)  
    >>> args.a          # 声名了-a,所以args.a的值为声明值True;  
    True  
    >>> args.b_new_name # 声名了-b,所以args.b_new_name值为声明值False;  
    False  
    

    测试3:使用长选项,-a -b都声明,所以都是store值

    >>> lst_args=['-a', '--b_long_opt'] # --b_long_opt是长选项, 需要使用双短线('--')进行声明  
    >>> args = parser.parse_args(lst_args)  
    >>> args.a          # 声名了-a,所以args.a的值为声明值True;  
    True  
    >>> args.b_new_name # 声名了-b,所以args.b_new_name值为声明值False;  
    False  
    

    4. 必选选项(选项必须声明, 不声明会报错)

    >>> parser.add_argument(  
    ...     '-c',          # 选项名称  
    ...     type=int,      # 选项类型是整数  
    ...     required=True  # 选项是必选选项  
    )  
    _StoreAction(optine_strings=['-c'], dest='c', nargs=None, const=None, default=None, Type=<class 'int'>, choices=None, help=None, metavar=None)  
    >>>  
    >>> # 选项-c必须声明,否则报错:error:the following argument are required:-c  
    >>> lst_args=['-c', '3']  
    >>> args = parser.parse_args(lst_args)  
    >>>  
    >>> # 选项-c类型为int,所以str '3'传到args.c时,会转类型为int 3;  
    >>> print(args.c)  
    3  
    

    5. 可选选项,可带默认值

    -d 为str类型的可选选项,默认值为'default_d'

    -d 为str类型的可选选项,默认值为'default_d'  
    >>> parser.add_argument(  
    ...     '-d',                  # 选项名  
    ...     type     = str,        # 选项类型  
    ...     required = False,      # '-d'是可选选项  
    ...     default  = 'default_d' # '-d'不声明时, 默认值为'default_d'  
    )  
    _StoreTrueAction(optine_strings=['-d'], dest='d', nargs=None, const=None, default='default_d', Type=<class 'int'>, choices=None, help=None, metavar=None)  
    >>>   
    >>> lst_args=['-c', '4', '-d', '5'] # -c 必选, -d 可选  
    >>> args = parser.parse_args(lst_args)  
    >>> args.c # 选项-c为必选,类型为int  
    4  
    >>> type(args.c)  
    <class 'int'>  
    >>>   
    >>> args.d # 选项-d为可选,类型为str  
    '5'  
    >>> type(args.d)  
    <class 'str'>  
    

    6. 长选项

    >>> parser.add_argument(  
    ...     '--e_long_opt' , # 表示长选项  
    ...     type=str       , #   
    ...     required=False , #  
    ...     default=[]     , #  
    ...     nargs='+'      , # 表示--e_long_opt这个选项后面可以有多个参数  
    )  
    _StoreTrueAction(optine_strings=['--e_long_opt'], dest='e_long_opt', nargs='+', const=None, default=[], Type=<class 'str'>, choices=None, help=None, metavar=None)  
    >>>  
    >>> # --e_long_opt 带了两个参数 'opt_e0', 'opt_e1'  
    >>> lst_args=['-c', '4', '--e_long_opt', 'opt_e0', 'opt_e1']  
    >>>   
    >>> args = parser.parse_args(lst_args)  
    >>>   
    >>> # --e_long_opt的两个参数组成一个list赋值给args.e_long_opt;  
    >>> args.e_long_opt  
    ['opt_e0', 'opt_e1']  
    

    7. 列表选项

    nargs='+' 表示当前选项可以有多个参数, 这些参数组成一个list, 例子见上一节.

    8. 未知选项

    如果sys.argv[1:]中出现了"位置选项123" 或 "命名选项–f 456",但"123" 或"-f"选项没有定义在add_argument()中时,直接使用parser.parse_args()会报告错误:
    error: unrecognized arguments: 123 –f 456;
    这时需要使用parser.parse_known_args()这个方法(而不是parser.parse_args()这个方法)。

    >>> lst_args = ['-a', '123', '-f', '456']  
    >>> parser.add_argument('-a', action='store_true',default=False)  
    >>>   
    >>> args, unknown_args = parser.parse_known_args(lst_args)  
    >>>   
    >>> args  
    Namespace(a=True)  
    >>> args.a # args得到的值与parser.parse_args()的返回值一致  
    True  
    >>>   
    >>> unknown_args # unknown_args得到的是处理完定义过的args后,剩下的选项;  
    ['123', '-f', '456']  
    
  • 相关阅读:
    TypeError: can't compare offset-naive and offset-aware datetimes bugfix
    pg_restore数据库恢复指令
    第四十期百度技术沙龙笔记整理
    JS事件模型小结
    matlab Newton method
    Markdown 语法的简要规则
    iOS社交分享Twitter、Facebook、拷贝到剪切板、LINE、及邮件
    Linux系统调用过程分析
    iOS自己定义返回button(不影响返回手势)
    MAVEN项目模块化
  • 原文地址:https://www.cnblogs.com/gaiqingfeng/p/13228992.html
Copyright © 2011-2022 走看看