Python编程者福音——命令行接口工具fire

浏览: 2593

大家使用最多的命令行工具应该是pip了,pip提供了很多的命令行参数和选项,我们在终端使用pip install --help命令可以查看install子命令的帮助文档。

image.png

可以看到,除了最常用的pip install package命令,我们还可以附加很多可选选项来控制pip install命令的行为。

例如:-r选项可以指定从一个requirements.txt的文件安装Python依赖包,--no-deps标志可以让pip在安装包的时候禁用自动安装依赖包的行为。

命令行接口的基础知识

命令行接口通常以可执行文件的名称开头。我们只需在控制台中输入它的名称,然后访问脚本的主入口点,例如pip

我们可以通过命令行,将参数传递给脚本,它们可以是:

Arguments (参数):这是传递给脚本的必需参数。如果您不提供它,则CLI会遇到错误。例如,pandas是此命令中的参数:pip install pandas

Options (选项):顾名思义,它是一个可选参数,通常包含一个名称和一个值对,例如pip install pandas --cache-dir ./my-cache-dir。就是指定了./my-cache-dir作为应使用的缓存目录。

Flags (标志):这是一个特殊的选项参数,它告诉脚本启用或禁用某些行为。最常见的可能是--help

为什么需要命令行接口?

想象一下,如果pip没有提供一个命令行接口,每次我们安装一个包的时候,还要去代码中手动修改我们要安装的包名不是?是不是非常的繁琐?

因此,当代码需要频繁的修改某些参数的时候,使用命令行接口可以将参数和代码分离开来,从而让你的代码更加简洁,适用范围更广。

Python中有很多可以让人轻松编写用户友好的命令行接口工具,如标准库中的argparse。然而在实际使用过程中发现,用argparse做命令行接口,需要创建解析器、定义参数、解析参数等3个步骤,无形中写了很多样本代码。

    import argparse

    # argparse需要手动定义和解析参数
    parser = argparse.ArgumentParser(description='Process some integers.')
    parser.add_argument('integers', metavar='N', type=int, nargs='+',
    help='an integer for the accumulator')
    parser.add_argument('--sum', dest='accumulate', action='https://ask.hellobi.com/store_const',
    const=sum, default=max,
    help='sum the integers (default: find the max)')

    args = parser.parse_args()
    print(args.accumulate(args.integers))

    相比之下,谷歌开源了fire命令行工具就简单的多了,很多情况下,只需要一行代码就搞定了。

    接下来,我们来看fire的基本用法!

    fire的基本用法

    fire是谷歌开源的一款命令行工具,支持从任意的Python对象自动生成命令行接口,与标准库中的argparse等工具相比,更加的简洁高效。

    假设我们有一个计算2个数值的函数,接收两个位置参数x和y,代码如下:

    sum.py

      import fire

      def sum(x,y):
      """两个数值的加法求和计算

      Args:
      x (int): 第一个数值输入
      y (int): 第二个数值输入

      Returns:
      int: 求和计算结果
      """
      return x+y

      现在,我们想利用fire将上面的函数生成一个命令行接口,只需在sum.py底部再加入下面2行代码:

      fire.py

        if __name__ == "__main__":
        fire.Fire(sum)

        现在,我们在执行sum.py脚本就可以带上两个命令行参数x和y了。

          # root @ MyMac-Pro in ~/Desktop [14:07:23] 
          $ python sum.py --x=1 --y=2

          上面提到过了fire使用的时候,不需要像argparse一样,需要定义参数、解析参数,十分的方便,fire还有提供了一个好用的功能是,fire会读取DocString字符串,自动生成命令行接口的文档,在命令行使用--help就可以查看。

          查看sum.py的帮助文档:

            # root @ MyMac-Pro in ~/Desktop [14:07:23] 
            $ python sum.py --help

            输出的命令行接口的帮助文档:

              NAME
              sum.py - 两个数值的加法求和计算

              SYNOPSIS
              sum.py X Y

              DESCRIPTION
              两个数值的加法求和计算

              POSITIONAL ARGUMENTS
              X
              第一个数值输入
              Y
              第二个数值输入

              NOTES
              You can also use flags syntax for POSITIONAL ARGUMENTS
              (END)

              问:fire只能用在函数上面吗?

              并非如此,fire可以用在模块、类、方法、函数等任意的对象,感兴趣的同学可以查看官方文档:https://github.com/google/python-fire/blob/master/docs/using-cli.md,了解fire更多的特性!

              欢迎关注我的公众号“数据科学杂谈”,原创技术文章第一时间推送。

              image.png

              推荐 0
              本文由 ID王大伟 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
              转载、引用前需联系作者,并署名作者且注明文章出处。
              本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

              0 个评论

              要回复文章请先登录注册