当我们写好了一个服务,或者是api或者是rpc服务,最快的最直接给用户使用的方式,就是给用户提供一个命令行工具,可以直接通过命令行,管理我们创建的服务。
这里我们就基于python的cli库fire,来编写一套针对之前写好的todo的api服务的命令行工具。fire是由google开发的一套快速开发命令行工具的库。接下来,我们就开始准备开发自己的命令行工具。
首先需要安装fire,非常简单。
pip install fire
这里我们因为需要连接api,要存储一些配置信息,需要第三方的库configparser,这个是用来解析配置文件的工具库,同时为了在命令行可以很好的展示用户查询的结果,我们需要table展示查询的结果,所以需要安装tabulate。
pip install configparserpip install tabulate
ok,现在所需要的依赖包都已经安装好了,我们就开始开发自己的程序了。
![1081757661d210e8212717f69ba574f9.png](https://i-blog.csdnimg.cn/blog_migrate/95d62613ce31d8207fb5f3069b872cba.jpeg)
看一下我们的代码目录结构,main.py是命令行工具的主程序,components下面是命令行工具所有支持的子命令的实现。utils里面我们写一些自己common的库。
从我们的main程序看一下。
![8fb5679511a0dde416f5fd663168eded.png](https://i-blog.csdnimg.cn/blog_migrate/bd1a297f20e50ab13e6530dbd906ec12.jpeg)
非常简单,定义一个class,初始化函数里面,设定所有支持的子命令的类。就可以了,我们可以通过main.py的help看到支持哪些子命令。
![e16864b3b5b153a93641921057ff21d8.png](https://i-blog.csdnimg.cn/blog_migrate/801786ee5643ba6d8bc2115dc5a0e65d.jpeg)
main.py
可以看到,有两个子命令config, todo, 然后每个子命令可以通过-- --help来显示帮助信息。
1. config命令
主要是对我们的命令行工作,做一些配置的操作,可以设置,和显示。
![861e9be9ac61d41c45f11ac52b51b990.png](https://i-blog.csdnimg.cn/blog_migrate/c95b6b3176b7a1a56ad0a46c24a53511.jpeg)
我们可以看到里面存储了api的地址和用户名,密码信息,看一下代码的实现。
![1d8c3958a4c0120732030019c3a467b9.png](https://i-blog.csdnimg.cn/blog_migrate/6bee01b9c773e3adb7f11d169c46905a.jpeg)
![914efe81779292deb48e8c455d4b161c.png](https://i-blog.csdnimg.cn/blog_migrate/f07e5038a0bb4397d31d84658691c115.jpeg)
![5fe032867cf4ee4495a2c27d85e6256b.png](https://i-blog.csdnimg.cn/blog_migrate/5f44e60b66ff1b7d51f401af291e8c37.jpeg)
set主要是把配置信息,写到了用户家目录下面的一个隐藏目录下面。这样,每次启动的时候,都会去配置文件里面读取配置信息。
2. todo命令
这个就是调用我们api服务的子命令了。主要是支持todo的create,get,list,delete操作。
![79eee77b2651269c1d04ddeb03562c6d.png](https://i-blog.csdnimg.cn/blog_migrate/849067ef09b3eecae3c376c8716823e8.jpeg)
这个就是todo所有的命令操作的过程,是不是很简单的就可以给我们的用户提供命令行的操作了。内部的实现,也是非常的简单,就是直接调用api显示结果。
![eb73706a07d9acc515e032d24b28fb1e.png](https://i-blog.csdnimg.cn/blog_migrate/dbe48f5888e0ccf15528f70ed8661c7d.jpeg)
todo list
这里我们简单展示一下list的命令的实现,首先获取token,然后把token放到headers里面,请求调用,把结果通过tabulate展示出来。上面的注释,都是会被fire展示在命令行的help里面的。
![bc214a3733716ea7b4b086c16b26ae31.png](https://i-blog.csdnimg.cn/blog_migrate/97269b90c7ee10d839177b75d0e9bec2.jpeg)
可以看到执行help的时候,会显示出todo create的帮助信息,包括用途,以及每个参数的描述。开发一个这样的命令行,是不是超级简单。谢谢大家。