zoukankan      html  css  js  c++  java
  • Python 使用 argparse 开发命令行工具/获取命令行参数/子命令实现

    一、大部分 Python 程序开发人员都知道可使用 sys.argv 获取在命令行中输入的参数,事实上我们可以进一步借助于另外一个 Python 内置库 argparse 来解析这些参数,并加入更多的功能。一些比较常用的第三方命令行解析工具

      click: https://click.palletsprojects.com/en/7.x/   

      docopt: http://docopt.org/

    二、这里简单介绍一下 argparse 的使用流程及在进行命令行工具开发时常用几个功能点

    1、依赖库导入

    import argparse

    2、创建解析对象

    parent_parser = argparse.ArgumentParser(usage="usage 信息", description="命令工具描述信息")

    3、加入子命令

    3.1 获取第一层子命令操作对象

    sub_parser_manager = parent_parser.add_subparsers(title="title message", help="第一层子命令的整体帮助信息")

    3.2 创建一个子命令

    son_parser_1 = sub_parser_manager.add_parser("command_name", help="command help mesasge")

    3.3 定义子命令的参数

    # nargs 指明该参数可定义的数目,"?" 只允许 1 个或者 0 个;"*" 允许 0 个或者多个,此时解析参数时返回的是列表;"+" 最少需要一个
    # type 解析出参数时返回的数据类型; dest 自定义属性接收解析出来的参数
    son_parser_1.add_argument("--name", nargs="?", type=str, help="write yourrname", dest="name")

    # 有时候我们并不需要输入某个参数的值(相当于内置的常量),可使用如下这种方式
    son_parser_1.add_argument("--money", action="store_const", const=0, help="you are poor", dest="money")

    3.4 将某个命令绑定函数

    son_parser_1.set_defaults(func=test_func)

    # 需要提前定义好目标函数
    def test_func(*args, **kwargs):
      print(args[0].name, args[0].money)

    是否需要定义子命令可根据实际情况而定,如果不需要子命令,直接使用  parent_parser 调用 add_argument 定义参数即可,如果需要定义多层子命令,使用相应层次的 parser 调用  add_subparsers 得到子命令管理器后,调用 add_parser 继续添加子命令即可

    4、解析参数

    args = parent_parser.parse_args()  # 返回一个 namespace 对象,该对象的属性里面包含了解析后得到的参数值

    5、执行函数

    # 执行函数功能(不同的子命令会自动指向到其绑定的函数)
    if args.__contains__("func"):
      args.func(args)
    else:
      # 如果没有绑定函数,进行其他处理操作
      pass

  • 相关阅读:
    五、MapReduce 发布服务
    四、MapReduce 基础
    三、Hadoop 的 API
    二、HDFS 架构
    php身份证号的验证
    php性能优化
    PHP网站开发方案
    php一个不错的分页
    2013年最流行的php框架盘点
    程序员之路
  • 原文地址:https://www.cnblogs.com/lowmanisbusy/p/13394114.html
Copyright © 2011-2022 走看看