zoukankan      html  css  js  c++  java
  • Python Argparse模块

    argparse模块

      在Python中,argparse模块是标准库中用来解析命令行参数的模块,用来替代已经过时的optparse模块。argparse模块能够根据程序中的定义从sys.argv中解析出来这些参数,并自动生成帮助和使用信息。

    ArgumentParse解析器

      使用argparse解析命令行参数时,首先需要创建一个解析器:

    import argparse
    
    parser = argparse.ArgumentParser()
    

      ArgumentParser类的初始化函数有多个参数,其中比较常用的是description,它是程序的描述信息,即帮助信息前面的文字。

    添加参数选项

      为应用程序添加参数选项需要使用ArgrmentParser对象的add_argument方法,该方法的格式如下:

    add_argument(name or flag...[, action ] [, nargs ] [, const ] [, default ] [, type ] [, choices ] [, required ] [,help ] [,metavar ] [, dest ] 
    

      各个参数含义如下:

    • name/flags:参数的名字  
    • action:遇到参数时的动作,默认值时store。  
    • nargs:参数的个数,可以时具体的数字,或者是”+“号或者”*“号。其中”*”号表示0或者多个参数,“+”号表示1个或多个参数。  
    • const action 和 nargs:需要的常量值  
    • default:不指定参数时的默认值  
    • type:参数的类型  
    • choices:参数允许的值  
    • required:可选参数是否可以省略  
    • help:参数的帮助信息  
    • metavar:在usage说明中的参数名称  
    • dest:解析后的参数名称

    action内置的6种动作:

    store 
    # 保存参数值,可能会先将参数值转换成另一个数据类型。若没有显式指定动作,则默认为该动作。
    
    store_const 
    # 保存一个被定义为参数规格一部分的值,而不是一个来自参数解析而来的值。这通常用于实现非布尔值的命令行标记。
    
    store_ture/store_false 
    # 保存相应的布尔值。这两个动作被用于实现布尔开关。
    
    append 
    #将值保存到一个列表中。若参数重复出现,则保存多个值。
    
    append_const 
    #将一个定义在参数规格中的值保存到一个列表中。
    
    version 
    #打印关于程序的版本信息,然后退出

    解析参数

      解析命令行参数需要用到AgrumentParser对象的parse_args方法,该方法返回一个NameSpace对象。获取对象后,参数值可以通过属性的方式进行访问。由于指定了默认值,那么直接运行,也不会报错

    parser.add_argument('-host',action='store',dest='server',default='localhost',help='connect to host')
    parser.add_argument('-p',action='store',dest='port',default='3306',help='the port to host')
    parser.parse_args()
    
    
    # parser.parse_args() 存储的值
    Namespace(port='3306', server='localhost')
    

      存贮布尔类型的值的时候action,存储为store_true类型。

      使用argparse进行参数解析还有另一个好处,它能够根据我们的选项定义自动生成帮助信息。(自动追加-h选项,打印帮助信息)

    模仿MySQL客户端的命令参数  

    import argparse
    
    parser = argparse.ArgumentParser(description='A Python-MySQL client')
    
    def getparser():
        parser.add_argument('--host',action='store',dest='host',required=True,help='connect to host')
        parser.add_argument('-u','--username',action='store',dest='user',required=True,help='user for login')
        parser.add_argument('-p','--password',action='store',dest='password',required=True,help='password to use when user connecting to server')
        parser.add_argument('-P','--port',action='store',dest='port',default=3306,type=int,help='port number to use for connection or 3306 or default')
        parser.add_argument('-v','--version',action='version',version='%(prog)s 0.1')
        return parser.parse_args()
        
    
    def main():
        parser = getparser()
        conn_args = dict(host=parser.host,username=parser.user,password=parser.password,port=parser.port)
        print(conn_args)
        
    if __name__ == '__main__':
        main()
    

    PS:如果 port参数可以指定多个参数,那么可以添加 nargs='+'即可。

    更详细的使用方法参考,戳我

      

     
     
     
  • 相关阅读:
    Java vs Python
    Compiled Language vs Scripting Language
    445. Add Two Numbers II
    213. House Robber II
    198. House Robber
    276. Paint Fence
    77. Combinations
    54. Spiral Matrix
    82. Remove Duplicates from Sorted List II
    80. Remove Duplicates from Sorted Array II
  • 原文地址:https://www.cnblogs.com/zhichaoma/p/8001451.html
Copyright © 2011-2022 走看看