• python标准库之argparse


    argparse的使用

    argparse 是 Python 内置的一个用于命令项选项与参数解析的模块,通过在程序中定义好我们需要的参数,argparse 将会从 sys.argv 中解析出这些参数,并自动生成帮助和使用信息。当然,Python 也有第三方的库可用于命令行解析,而且功能也更加强大,比如 docopt,Click。

    ipython下使用argparse

    首先安装ipython

    pip3 install ipython
    

    执行下面命令

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

    输出

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

    上面的代码很简单,
    方法ArgumentParser具体参数如下

    ArgumentParser(prog=None, usage=None,description=None, epilog=None, parents=[],formatter_class=argparse.HelpFormatter, prefix_chars='-',fromfile_prefix_chars=None, argument_default=None,conflict_handler='error', add_help=True)
    

    这些参数都有默认值,当调用parser.print_help()或者运行程序时由于参数不正确(此时python解释器其实也是调用了pring_help()方法时,会打印这些描述信息,一般只需要传递description参数。
    上面的代码是在命令行中运行,下面我们把代码写在py文件,并通过命令行调用。

    通过命令行传参调用py文件

    首先我们创建一个py文件代码如下

    #1.py
    import argparse
    def get_args():
    	parser=argparse.ArgumentParser(
    	description="A Simple argument parser",
    	epilog="This is where you might put usage"
    		)
    	return parse.parse_args()
    if __name__=="__main__":
         get_args()	
    

    然后在命令执行如下命令

    python3 1.py -h
    

    输出和第一个例子类似的内容

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

    下面让我加一些自定义的参数

    添加自定义参数

    首先我们先来看一段代码

    #2.py
    import argparse
    
    def get_args():
    	parser=argparse.ArgumentParser(
    	description="A simple argument parser",
    	epilog="This is where you might put example usage")
    	# 使用required参数设置为必须的参数
    	parser.add_argument('-x', action="store", required=True,help='Help text for option X')
    	# 可选参数
    	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()
    

    我们使用add_argument添加需要参数,第一个值是命令行输入的参数,设置required参数的值可以设定是否为必须参数,显示help帮助内容,type声明输入参数的类型。
    调用parse_args方法可以解析添加的参数。
    命令行输入下面内容

    python3 2.py
    

    输出

    usage: 2.py [-h] -x X [-y Y] [-z Z]
    2.py: error: the following arguments are required: -x
    

    可以看出,调用的文件文2.py,有 x y z三个参数,其中第二行出错了,原因是x是必须参数而这里我没有赋值。
    如是我修改成以下内容

    python3 2.py -x hehe -y "233" -z "233"
    

    可以看到结果如下

    Namespace(x='hehe', y='233', z=233)
    

    因为我声明了z为int所以这里我即使属于字符串程序里也会给转成int类型。

    短选项和长选项

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

    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")
    

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

    选项冲突

    如果两个选项相互冲突,你该如何解决?一个常见的例子就是在调试模式还是在静音模式下,运行你的应用?你可以在任意一种模式下运行,但是不能同时在两种模式下运行。我们如何防止用户以这种方式运行呢?一种简单的方式就是通过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群组,让我们尝试着在命令行中输入如下命令,

    python3 2.py -x 10 -y 2
    

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

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

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

  • 相关阅读:
    bzoj5328: [Sdoi2018]物理实验
    HDU
    bzoj4820: [Sdoi2017]硬币游戏
    bzoj4600: [Sdoi2016]硬币游戏
    阿里云配置防火墙规则
    博客园 添加 Live 2D 模型
    R语言做逻辑回归
    R语言错误的提示(中英文翻译)
    用随机森林分类
    python 切换虚拟环境
  • 原文地址:https://www.cnblogs.com/c-x-a/p/10320936.html
Copyright © 2020-2023  润新知