zoukankan      html  css  js  c++  java
  • 如何让python脚本支持命令行参数--getopt和click模块

    一、如何让python脚本支持命令行参数

    1、使用click模块

    如何使用这个模块,在我前面的博客已经写过了,可参考:https://www.cnblogs.com/Zzbj/p/11309130.html

    2、使用getopt模块

    getopt模块可短选项和长选项两种格式。
    短选项格式为"-"加上单个字母选项;
    长选项为"--"加上一个单词

    3、click和getopt的不同点

    1. click模块是第三方的模块,而getopt是内置的模块
    2. click模块的功能比较强大,自带的--help参数,提醒功能比较优美
    3. click模块可以对命令行参数进行一些限制
    4. getopt模块是内置的模块,对于一些简单的要求比较方便

    二、getopt模块的使用

    1、介绍

    getopt模块需要配合sys模块一起使用,再多的语言都是苍白的,直接看例子解释吧

    2、例子

    # 此脚本名称为: test.py
    import sys
    import getopt
    
    
    def help_msg():
        """
        自定义帮助信息(click模块就不需要自定义帮助信息,直接可用--help)
        :return: 各个参数的说明
        """
        print('usage:')
        print('-h, --help: print help message.')
        print('-o, --output: output file')
        print('-c, --cfg: config')
    
    
    def main(argv):
        # 没有给命令行参数,直接退出python脚本,不执行
        if len(argv) <= 1:
            help_msg()
            sys.exit(0)
    
        try:
            opts, args = getopt.getopt(argv[1:], 'ho:c:', ['help', 'output=', 'cfg='])
        except getopt.GetoptError as err:
            print(str(err))
            sys.exit(2)
    
        print("额外信息args:%s" % str(args))
    
        for o, a in opts:
            if o in ('-h', '--help'):
                help_msg()
                sys.exit(1)
            elif o in ('-o', '--output'):
                # 创建输出文件
                print("参数是:%s; 值是:%s" % (o, a))
            elif o in ('-c', '--cfg'):
                # 添加配置文件信息
                print("参数是:%s; 值是:%s" % (o, a))
            else:
                print('unhandled option')
                sys.exit(3)
    
    
    if __name__ == '__main__':
        main(sys.argv)
    
    
    # 在服务器上或者window的cmd上执行下面的命令是正确的:
    python test.py -h
    python test.py --help
    # 这两个结果都是
    """
    usage:
    -h, --help: print help message.
    -o, --output: output file
    -c, --cfg: config
    """
    
    python test.py -o a.txt -c config.cfg
    python test.py --output a.txt --cfg config.cfg
    # 结果
    """
    额外信息args:[]
    参数是:-o; 值是:a.txt
    参数是:-c; 值是:config.cfg
    
    额外信息args:[]
    参数是:--output; 值是:a.txt
    参数是:--cfg; 值是:config.cfg
    
    """
    
    
    # 下面这个是错误的
    python test.py -a
    # 结果
    """
    option -a not recognized
    """

    3、解释

    1.函数的使用

    opts, args = getopt.getopt(argv[1:], 'ho:c:', ['help', 'output=', 'cfg='])


    1, getopt()是处理的函数。

    2, 使用sys.argv[1:]过滤掉第一个参数(它是执行脚本的名字)

    3,第二个参数(字符串),代表的是短格式,'ho:c:',每一个英文字母代表一个短格式的命令行参数,字英文母后面有冒号":"的代表有附加参数
    没有冒号的代表一个开关选项,即这里的 'h' 代表开关选项,不需要附加参数,'o'和'c'有附加的参数

    4, 第三个参数(列表),代表的是长格式,['help', 'output=', 'cfg='],列表每一个元素代表一个长格式的命令行参数,长格式串也可以有开关状态,即后面不跟"="号。
    如果有等号则表示后面还应有一个附加参数。这个长格式表示"help"是一个开关选项;"output="则表示后面应该带一个参数。

    5, 调用getopt函数。函数返回两个列表:opts和args。opts为分析出的格式信息。args为不属于格式信息的剩余的命令行参数,即不是按照getopt()里面定义的长或短选项字符和附加参数以外的信息。
    opts是一个两元组的列表。每个元素为:(选项串,附加参数)。如果没有附加参数则为空串''。

    6, 当命令行分析出错时,会抛出getopt.GetoptError异常。

    2.选项写法

    短格式: "-"号后面要紧跟一个选项字母。如果还有此选项的附加参数,可以用空格分开,也可以不分开。长度任意,可以用引号。
    长格式: "--"号后面要跟一个单词。如果还有些选项的附加参数,可以用空格分开,也可以用"=",再加上参数。"="号前后不能有空格

    3.使用

    python test.py --output a.txt --cfg config.cfg hello world
    """
    额外信息args:['hello', 'world']
    参数是:--output; 值是:a.txt
    参数是:--cfg; 值是:config.cfg
    """

  • 相关阅读:
    字符串Hash 学习笔记
    P4315 月下“毛景树” 题解
    page
    Equation
    Graph
    配置UOJ数据的正确姿势
    luogu2261余数求和题解--整除分块
    luogu2858奶牛零食题解--区间DP
    luogu1005矩阵取数游戏题解--区间DP
    luogu4677山区建小学题解--区间DP
  • 原文地址:https://www.cnblogs.com/Zzbj/p/11938911.html
Copyright © 2011-2022 走看看