• Python标准模块--argparse


    1 模块简介

    你一定很奇怪Python是如何命令行中的变量的吧?argparse就是用来解决这个问题的,argparse是optparse的替代。

    2 模块使用

    2.1 开始

    我发现解释一个编程的概念,最简单的方式就是用一段代码来展示。下面就是一段超级简单的代码,

    import argparse
    
    parser = argparse.ArgumentParser(
                description = "A simple argument parser",
                epilog = "This is where you might put example usage"
                )
    
    parser.print_help()
    

    控制台输出,

    usage: main.py [-h]
    
    A simple argument parser
    
    optional arguments:
      -h, --help  show this help message and exit
    
    This is where you might put example usage
    

    这里,我们仅仅是引入argparse,然后设置了描述和使用部分。这里主要是当你向你所创建的程序寻求帮助时,它将会告诉你如何使用它。在这个例子中,它打印出简单的描述,默认的选项("-h")和使用示例。

    我们让这个例子更加的具体,你一般是通过命令行传递参数,因此将代码移到Python文件中的一个函数。

    import argparse
    
    def get_args():
        parser = argparse.ArgumentParser(
                    description = "A simple argument parser",
                    epilog = "This is where you might put example usage"
                    )
        return parser.print_help()
    
    if __name__ == "__main__":
        get_args()
    

    在命令行中运行脚本,

    python main.py -h
    

    将会显示出我们之前看到的文本信息,现在,我们开始学习如何添加我们需要的变量吧。

    2.2 添加变量

    下面一段代码是添加三个新的我们的parser可以理解的变量。我们添加一个必须要求的变量,另外两个不是必须要求的,我们也可以添加一个默认和一个必须要求的类型。

    import argparse
    
    def get_args():
        parser = argparse.ArgumentParser(
                    description = "A simple argument parser",
                    epilog = "This is where you might put example usage"
                    )
        # required argument
        parser.add_argument('-x',action = "store",required = True,help = "Help text for option X")
        # optional argument
        parser.add_argument('-y',help = "Help text for option Y",default = False)
        parser.add_argument('-z',help = "Help text for option Z",type = int)
        print(parser.parse_args())
    
    if __name__ == "__main__":
        get_args()
    

    控制台输出,

    zhb@zhb-VM:~/workspace/PythonTest$ python main.py
    usage: main.py [-h] -x X [-y Y] [-z Z]
    main.py: error: argument -x is required
    zhb@zhb-VM:~/workspace/PythonTest$ python main.py -x something
    Namespace(x='something', y=False, z=None)
    zhb@zhb-VM:~/workspace/PythonTest$ python main.py -x something -y text
    Namespace(x='something', y='text', z=None)
    zhb@zhb-VM:~/workspace/PythonTest$ python main.py -x something -z text
    usage: main.py [-h] -x X [-y Y] [-z Z]
    main.py: error: argument -z: invalid int value: 'text'
    zhb@zhb-VM:~/workspace/PythonTest$ python main.py -x something -z 10
    Namespace(x='something', y=False, z=10)
    

    正如你所看到的,如果你不传入任何变量,而直接运行代码,你将会出错。然后,我们仅仅传入要求的变量,你可以看到对于其它两个变量直接使用默认值。再然后,我们试图将"text"传给"-y"变量并将它存储下来,所以,我们直到它并不要求是布尔类型。最后两个例子显示当你传入一个无效和有效的值给"-z"时的结果。

    到此,变量名字不需要只有一个字符,你可以修改它,让它的描述性更强,例如"arg1"或者"simulator"或者任何你想要的。

    2.3 短选项和长选项

    下面我们将会学习如何使用短选项和长选项,我们实际上已经使用了短选项,

    parser.add_argument('-x',action = "store",required = True,help = "Help text for option X")
    

    如果我们想使用长选项,我们仅仅需要在短选项的右边添加长选项,如下所示,

    parser.add_argument('-x','--execute', action = "store",required = True,help = "Help text for option X")
    

    你将会注意到长选项不止一个字符,并且它必须要以两个破折号开始,而不是一个。

    2.4 选项冲突

    如果两个选项相互冲突,你该如何解决?一个常见的例子就是在调试模式还是在静音模式下,运行你的应用?你可以在任意一种模式下运行,但是不能同时在两种模式下运行。我们如何防止用户以这种方式运行呢?一种简单的方式就是通过mutually_exclusie_group函数,假设选项x和选项y不能同时运行。

    import argparse
    
    def get_args():
        parser = argparse.ArgumentParser(
                    description = "A simple argument parser",
                    epilog = "This is where you might put example usage"
                    )
        group = parser.add_mutually_exclusive_group()
        group.add_argument('-x','--execute', action = "store",help = "Help text for option X")
        group.add_argument('-y',help = "Help text for option Y",default = False)
        parser.add_argument('-z',help = "Help text for option Z",type = int)
        print(parser.parse_args())
    
    if __name__ == "__main__":
        get_args()
    

    你将会注意到我们创建了一个手动排它的群组,我们将需要手动排它的选项添加到群组,剩下的选项继续添加到常规的parser群组,让我们尝试着在命令行中输入如下命令,

    zhb@zhb-VM:~/workspace/PythonTest$ python main.py -x 10 -y 2
    

    当我们执行这条命令,控制台输出,

    usage: main.py [-h] [-x EXECUTE | -y Y] [-z Z]
    main.py: error: argument -y: not allowed with argument -x/--execute
    

    很明显,它并没有执行成功,并且argparse模块告诉我们什么原因。

    2.5 总结

    你现在了解了如何创建一个基本的变量解析器。这个模块还有许多其它你可能感兴趣的用法,例如定义一个交替的目标名称用于保存,使用不同的前缀,创建变量群组等等。我推荐你去阅读官方文档。

    3 Reference

    Python 201

  • 相关阅读:
    Java 8 新特性-菜鸟教程 (8) -Java 8 日期时间 API
    Java 8 新特性-菜鸟教程 (7) -Java 8 Nashorn JavaScript
    Java 8 新特性-菜鸟教程 (6) -Java 8 Optional 类
    心理相关
    matlab和Visio安装
    论文资料搜集整理(研究现状)
    调式相关
    梅花落与折杨柳
    混合高斯模型——学习笔记
    NSCT,非下采样Contourlet变换——学习笔记
  • 原文地址:https://www.cnblogs.com/zhbzz2007/p/6031560.html
Copyright © 2020-2023  润新知