zoukankan      html  css  js  c++  java
  • Python模块学习

    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='+'即可。

    总结

    使用步骤:

      1:import argparse

      2:parser = argparse.ArgumentParser()

      3:parser.add_argument()

      4:parser.parse_args()

    解释:首先导入该模块;然后创建一个解析对象;然后向该对象中添加你要关注的命令行参数和选项,每一个add_argument方法对应一个你要关注的参数或选项;最后调用parse_args()方法进行解析;解析成功之后即可使用。

    更详细的使用方法参考:https://docs.python.org/3/library/argparse.html  

      

  • 相关阅读:
    spring mvc拦截器和<mvc:annotation-driven />的详解
    SpringMVC的工作流程-005
    子线程循环10次,接着主线程循环100次,接着又回到子线程循环10次,接着再回到主线程循环100次,如此循环50次-004
    简单java死锁设计002
    uwsgi手动安装时报错ValueError: invalid literal for int() with base 10: '32_1'
    flask jinja的宏
    Flask Web 开发 错误页面自定义
    Flask权限管理
    python uwsgi报错epoll_ctl(): Bad file descriptor
    linux怎么上真正的国际互联网
  • 原文地址:https://www.cnblogs.com/dachenzi/p/7979708.html
Copyright © 2011-2022 走看看