美文网首页python基础Python
Python的命令行参数解析

Python的命令行参数解析

作者: SnailTyan | 来源:发表于2017-09-13 11:00 被阅读633次

    文章作者:Tyan
    博客:noahsnail.com  |  CSDN  |  简书

    命令行参数解析在编程语言中基本都会碰到,Python中内置了一个用于命令项选项与参数解析的模块argparse。下面主要介绍两种解析Python命令行参数的方式。

    1. sys.argv

    解析Python中命令行参数的最传统的方法是通过sys.argv。Demo如下:

    #!/usr/env/python python
    # _*_ coding: utf-8 _*_
    
    import sys
    
    param1 = sys.argv[1]
    param2 = sys.argv[2]
    
    print sys.argv
    print param1
    print param2
    print type(param1)
    print type(param2)
    

    测试结果如下:

    $ python test.py 1 2
    ['test.py', '1', '2']
    1
    2
    

    这种方法比较古老,灵活性很差,同时解析出来的参数都是str类型。但在编写简单脚本,参数较少且固定时比较方便。

    2. argparse

    argparse模块是Python内置的参数解析模块,使用起来比较简单且功能强大。Demo如下:

    #!/usr/env/python python
    # _*_ coding: utf-8 _*_
    
    import argparse
    
    # Create ArgumentParser() object
    parser = argparse.ArgumentParser()
    
    # Add argument
    parser.add_argument('--train', required=True, help='path to dataset')
    parser.add_argument('--val', required=True, help='path to dataset')
    parser.add_argument('--total', type=int, help='number of dataset', default=100)
    parser.add_argument('--lr', type=float, default=0.01, help='learning rate')
    
    # Print usage
    parser.print_help()
    
    # Parse argument
    args = parser.parse_args()
    
    # Print args
    print args
    
    print args.train
    print type(args.train)
    print args.val
    print type(args.val)
    print args.total
    print type(args.total)
    print args.lr
    print type(args.lr)
    

    测试结果如下:

    # Test 1
    python test.py --train train_lmdb --val val_lmdb --total 10000 --lr 0.001
    usage: test.py [-h] --train TRAIN --val VAL [--total TOTAL] [--lr LR]
    
    optional arguments:
      -h, --help     show this help message and exit
      --train TRAIN  path to dataset
      --val VAL      path to dataset
      --total TOTAL  number of dataset
      --lr LR        learning rate
    Namespace(lr=0.001, total=10000, train='train_lmdb', val='val_lmdb')
    train_lmdb
    <type 'str'>
    val_lmdb
    <type 'str'>
    10000
    <type 'int'>
    0.001
    <type 'float'>
    
    # Test 2
    python test.py --train train_lmdb --val val_lmdb
    usage: test.py [-h] --train TRAIN --val VAL [--total TOTAL] [--lr LR]
    
    optional arguments:
      -h, --help     show this help message and exit
      --train TRAIN  path to dataset
      --val VAL      path to dataset
      --total TOTAL  number of dataset
      --lr LR        learning rate
    Namespace(lr=0.01, total=100, train='train_lmdb', val='val_lmdb')
    train_lmdb
    <type 'str'>
    val_lmdb
    <type 'str'>
    100
    <type 'int'>
    0.01
    <type 'float'>
    
    
    # Test 3
    python test.py --val val_lmdb --train train_lmdb
    usage: test.py [-h] --train TRAIN --val VAL [--total TOTAL] [--lr LR]
    
    optional arguments:
      -h, --help     show this help message and exit
      --train TRAIN  path to dataset
      --val VAL      path to dataset
      --total TOTAL  number of dataset
      --lr LR        learning rate
    Namespace(lr=0.01, total=100, train='train_lmdb', val='val_lmdb')
    train_lmdb
    <type 'str'>
    val_lmdb
    <type 'str'>
    100
    <type 'int'>
    0.01
    <type 'float'>
    

    ArgumentParser类创建时的参数如下:

    • prog - 程序的名字(默认:sys.argv[0])
    • usage - 描述程序用法的字符串(默认:从解析器的参数生成)
    • description - 参数帮助信息之前的文本(默认:空)
    • epilog - 参数帮助信息之后的文本(默认:空)
    • parents - ArgumentParser 对象的一个列表,这些对象的参数应该包括进去
    • formatter_class - 定制化帮助信息的类
    • prefix_chars - 可选参数的前缀字符集(默认:‘-‘)
    • fromfile_prefix_chars - 额外的参数应该读取的文件的前缀字符集(默认:None)
    • argument_default - 参数的全局默认值(默认:None)
    • conflict_handler - 解决冲突的可选参数的策略(通常没有必要)
    • add_help - 给解析器添加-h/–help 选项(默认:True)

    add_argument函数的参数如下:

    • name or flags - 选项字符串的名字或者列表,例如foo 或者-f, --foo。
    • action - 在命令行遇到该参数时采取的基本动作类型。
    • nargs - 应该读取的命令行参数数目。
    • const - 某些action和nargs选项要求的常数值。
    • default - 如果命令行中没有出现该参数时的默认值。
    • type - 命令行参数应该被转换成的类型。
    • choices - 参数可允许的值的一个容器。
    • required - 该命令行选项是否可以省略(只针对可选参数)。
    • help - 参数的简短描述。
    • metavar - 参数在帮助信息中的名字。
    • dest - 给parse_args()返回的对象要添加的属性名称。

    参考资料:

    1. http://python.usyiyi.cn/translate/python_278/library/argparse.html
    2. http://wiki.jikexueyuan.com/project/explore-python/Standard-Modules/argparse.html

    相关文章

      网友评论

      本文标题:Python的命令行参数解析

      本文链接:https://www.haomeiwen.com/subject/haeksxtx.html