美文网首页
Python命令行参数argv和argparse使用总结

Python命令行参数argv和argparse使用总结

作者: 葛木瓜 | 来源:发表于2020-04-11 15:30 被阅读0次

    [toc]

    概述

    运行python脚本时通过命令行方式传入运行参数通常有以下两种自建方式:

    • sys.argv - 简洁
    • argparse - 丰富,可自定义

    下面详细说一下具体时使用

    argv

    # test_argv.py
    
    import sys
    
    args = sys.argv
    print(f'args = {args}')
    
    >>> output
    ➜ git:(master) python3 test_argv.py         
    args = ['test_argv.py']
    ➜ git:(master) ✗ python3 test_argv.py 1 2 3
    args = ['test_argv.py', '1', '2', '3']
    ➜ git:(master) ✗ python3 test_argv.py 1 2 3 'hello world !'
    args = ['test_argv.py', '1', '2', '3', 'hello world !']
    

    从上面可以看出,通过argv方法获取的结果:

    • 返回为list
    • 第一个参数为脚本本身
    • 如参数中间带空格,用引号即可

    argparse

    argparse模块的功能较为丰富,其核心是通过add_argument方法自定义入参的:标志、格式、类型和范围等特性,常用如下:

    • *name_or_flag - 定义入参名或flag,如'-n', '--number'
    • type - 指定入参类型
    • choices - 指定入参范围
    • default - 指定入参默认值
    • required - 指定该餐素是否不要,布尔类型
    • help - 参数概述

    更多请参考: argparse

    实例

    test_argv.py

    import argparse
    
    # 初始化一个parser对象
    parser = argparse.ArgumentParser(description='test module of argparse')
    
    # 指定-n/--number的参数
    # 类型为int
    # help为简短地说明
    parser.add_argument(
        '-n', '--number', type=int,
        help='args of number'
    )
    
    # 指定-o/--output参数
    # 并限制类型为:['txt', 'csv', 'doc']
    parser.add_argument(
        '-o', '--output', type=str,
        choices=['txt', 'csv', 'doc'],
        help='output method'
    )
    
    # 指定-d/--default参数
    # 并限制类型为:['txt', 'csv', 'doc']
    parser.add_argument(
        '-d', '--default', type=int,
        choices=[_ for _ in range(1, 10)],
        default=5,
        help='default'
    )
    
    # 指定位置参数foo
    parser.add_argument('foo')
    
    args = parser.parse_args()
    print(f'args = {args}')
    
    # 获取指定参数
    print(
        f'number = {args.number}, type = {type(args.number)}\n'
        f'output = {args.output}, type = {type(args.output)}\n'
        f'default = {args.default}, type = {type(args.default)}\n'
        f'foo = {args.foo}, type = {type(args.foo)}'
    )
    

    output

    # -h - 打印help
    ➜ git:(master) ✗ python3 test_argv.py -h
    usage: test_argv.py [-h] [-n NUMBER] [-o {txt,csv,doc}]
                        [-d {1,2,3,4,5,6,7,8,9}]
                        foo
    
    test module of argparse
    
    positional arguments:
      foo
    
    optional arguments:
      -h, --help            show this help message and exit
      -n NUMBER, --number NUMBER
                            args of number
      -o {txt,csv,doc}, --output {txt,csv,doc}
                            output method
      -d {1,2,3,4,5,6,7,8,9}, --default {1,2,3,4,5,6,7,8,9}
                            default
    # 不带参数运行,结果为None
    ➜ git:(master) ✗ python3 test_argv.py   
    args = Namespace(number=None, output=None)
    number = None
    output = None
    
    # 带参数运行
    ➜ git:(master) ✗ python3 test_argv.py -n 33 --output txt
    args = Namespace(number=33, output='txt')
    number = 33, type = <class 'int'>
    output = txt, type = <class 'str'>
    
    # 参数格式错误
    ➜ git:(master) ✗ python3 test_argv.py -n str         
    usage: test_argv.py [-h] [-n NUMBER] [-o {txt,csv,doc}]
    test_argv.py: error: argument -n/--number: invalid int value: 'str'
    ➜ git:(master) ✗ python3 test_argv.py -o excel       
    usage: test_argv.py [-h] [-n NUMBER] [-o {txt,csv,doc}]
    test_argv.py: error: argument -o/--output: invalid choice: 'excel' (choose from 'txt', 'csv', 'doc')
    
    # 默认参数 
    ➜ git:(master) ✗ python3 test_argv.py      
    args = Namespace(default=5, number=None, output=None)
    number = None, type = <class 'NoneType'>
    output = None, type = <class 'NoneType'>
    output = 5, type = <class 'int'>
    

    相关文章

      网友评论

          本文标题:Python命令行参数argv和argparse使用总结

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