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

可以看到,除了最常用的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='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 firedef 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 YDESCRIPTION    两个数值的加法求和计算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更多的特性!

推荐阅读

•  竟有如此沙雕的代码注释?头给我笑掉了!•  又跌!6月全国程序员工资新统计,太扎心!•  面试了一个工作 4 年的程序员,还不如个应届生...•  好险!差点要写一个300行的 if-else!•  keras如何多输入多输出,以及中间层输出


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

点个在看,是我继续原创的动力!

命令行参数怎么输入_太好用了!谷歌开源的命令行接口工具fire相关推荐

  1. python输入正方形边长值、计算其面积_尝试修改列6.2编写命令行参数解析的程序,解析命令行参数所输入边长的值,计算并输出正方形的周长和面积。_学小易找答案...

    [简答题] [单选题]ZigBee 中每个协调点最多可连接______个节点,一个ZigBee网络最多可容纳______个节点.( ) [资料题]DWord-Ans.pdf 索引和目录.pdf 完成效 ...

  2. c语言命令行参数怎么输入_C语言程序设计——这个函数原型你看懂了吗

    虽然过去了好多年,但我仍然清楚地记得自己第一次看到signal函数原型时的惊讶. 学习UNIX环境C编程的朋友都知道,信号是绕不过去的一道坎,而信号处理的第一重要函数就是signal(). 什么都不说 ...

  3. C++ main函数命令行参数使用

    1. C/C++语言中的main函数,经常带有参数argc,argv,如下: int main(int argc, char** argv) int main(int argc, char* argv ...

  4. 调优哪家强——tensorflow命令行参数

    作者系中国科学院助理研究员. 深度学习神经网络往往有过多的Hyperparameter需要调优,优化算法.学习率.卷积核尺寸等很多参数都需要不断调整,使用命令行参数是非常方便的.有两种实现方式,一是利 ...

  5. 使用 Apache Commons CLI 解析命令行参数示例

    很好的输入参数解析方法 ,转载记录下 转载在: https://www.cnblogs.com/onmyway20xx/p/7346709.html Apache Commons CLI 简介 Apa ...

  6. 使用命令行参数接受输入数据,从中选出最大和最小值

    1.编写一段程序,接收用户从键盘上输入的三个整数x,y,z,从中选出最大和最小者. 要求:使用命令行参数接收用户数据 //若无强制要求使用命令行参数接受用户数据,则还可以用Scanner来进行输入 i ...

  7. 2、运行.py文件、字符串、保留字符、行和缩进、多行语句、引号、注释、等待用户输入、同一行显示多条语句、命令行参数

    2Python基础语法 2.1运行.py文件 运行方式类似: $ python test.py 2.2Python标识符 在Python里,标识符由字母.数字.下划线组成. 在Python中,所有标识 ...

  8. java命令行参数工具_Java方法中的参数太多,第8部分:工具

    java命令行参数工具 在我的系列文章的前七篇文章中,有关处理Java方法中期望的参数过多的内容集中在减少方法或构造函数期望的参数数量的替代方法上. 在本系列的第八篇文章中,我将介绍一些工具,这些工具 ...

  9. python命令行输入参数_Python命令行参数处理

    sys模块 sys模块代表了Python解释器,主要用于获取和Python解释器相关的信息,其中 sys.argv 可以获取命令行参数 在Python交互式解释器中可以先导入sys模块 import ...

最新文章

  1. php 云片网对接,php调用云片网接口发送短信的实现方法
  2. Struts2之ModelDriven
  3. vue 过滤器的使用(解决forEach遇到的问题)
  4. Intel深度摄像头RealSense D345(实感双目摄像头)和目标检测结合使用
  5. Python-使用python-memcache操作Memcached
  6. python numpy中astype使用不当导致图像出现artifact
  7. 重新设定mysql密码~,网上方法都是,这里选一个。
  8. 交换两个整型变量的数值
  9. Python一直报错:SyntaxError: invalid syntax 的原因及解决办法
  10. 开箱即用的 Prometheus 告警规则集
  11. Ubuntu18.04安装CUDA10.1和cuDNN v7.6.5
  12. android10 imei横线,【报Bug】android10设备plus.device.getInfo获取imei为空
  13. 模重复平方计算法的C实现
  14. seata分布式事务处理教程
  15. 合宙Air105 + GC032A摄像头驱动显示教程说明
  16. Java入门基础及面试100题--初入门
  17. C技能树:运算符优先级与求值顺序
  18. 跨境电商前景 跨境电商运营前景待遇
  19. 使用纯CSS实现未知尺寸的图片(但高宽都小于500px)在500px的正方形容器中水平和垂直居中。你有几种方法?
  20. 声网首发RTE行业专著《实时万象》,拉开RTE2022序幕

热门文章

  1. Python 中,matplotlib绘图无法显示中文的问题
  2. LeetCode第45场双周赛-解题报告
  3. Power Bi:零售数据可视化
  4. (二十五)【NIPS 2017】Prototypical Networks for Few-shot Learning
  5. 2020年深度学习调参技巧合集
  6. 美团点评Docker容器管理平台
  7. 论文小综 | 文档级关系抽取方法(上)
  8. 领域应用 | ​英文抗生素药物医学知识图谱 IASO1.0 版发布 线上试用正式启动
  9. Android官方开发文档Training系列课程中文版:与其它APP交互之允许其它APP启动你的Activity
  10. 2 计算机网络性能指标