python 编写命令行工具
你一定用过很多 linux 的命令行工具,并且觉得这些工具很酷。
Python 能编写这些工具吗?
答案是肯定的。今天我们就来看看如何用 python 编写命令行工具。
实现方式
如何接受cmd中输入的参数,需要用到的就是命令行解析工具。
python中有很多命令行解析库,主要有如下几种
-
sys.argv
-
argparse 库
-
click 库
-
fire 库(这是一个神器)
sys.argv
概念
可以把sys.argv理解成一个list
其中第一个元素是代码所在的module,比如代码是在cmd.py文件夹下编辑,
在命令行中运行python cmd.py
此时sys.argv[0]就是cmd.py
后面的元素是我们在命令行中给它加入的参数
例子
我们看一下下面例子
在cmd.py文件中输入下面内容
import sys
a = sys.argv
print(a)
在 cmd.py 所在文件夹中打开cmd(本文之后所有在cmd中输入都指的是在这个文件夹下的cmd),输入
测试日志。
PS D:\python\30-clis\arg> python .\cmd.py
['.\\cmd.py']
PS D:\python\30-clis\arg> python .\cmd.py a b cv d
['.\\cmd.py', 'a', 'b', 'cv', 'd']
然后我们可以根据各个参数进行单独的处理。
但是这样直接处理的方式存在下面的问题:
-
一个个解析参数太麻烦了,无法对象化,使用很麻烦
-
参数的校验等等问题,需要每个开发者去单独处理
-
命令的文档等等怎么处理。一个个去路由写吗?很不优雅
这些问题,肯定会有人已经帮我们处理好了。
下面我们来看看这些方法:
命令行的常见概念
这里以 powershell 为例子。
基本命令
比如最常用的 ls
命令
ls
就可以罗列当前路径下的文件列表
帮助文档
当然,我们还需要知道其他的功能。
比如
help ls
- 日志如下
PS C:\Users\binbin.hou> help ls
名称
Get-ChildItem
语法
Get-ChildItem [[-Path] <string[]>] [[-Filter] <string>] [<CommonParameters>]
Get-ChildItem [[-Filter] <string>] [<CommonParameters>]
别名
gci
ls
dir
备注
Get-Help 在此计算机上找不到该 cmdlet 的帮助文件。它仅显示部分帮助。
-- 若要下载并安装包含此 cmdlet 的模块的帮助文件,请使用 Update-Help。
-- 若要联机查看此 cmdlet 的帮助主题,请键入: "Get-Help Get-ChildItem -Online" 或
转到 https://go.microsoft.com/fwlink/?LinkID=113308。
特殊化使用
有时候我们希望递归查看文件,或者查看文件的详细信息。
就可以通过参数来指定。
大部分的工具都是这种套路。
CLI
必须在 setup.py 中指定
classifiers=[
"Programming Language :: Python :: 3",
"License :: OSI Approved :: Apache Software License",
"Operating System :: OS Independent",
],
# CLI 必须指定信息
entry_points = {
'console_scripts': [
'emoji_cli = emoji_cli:main'
]
}
参考资料
https://www.jianshu.com/p/d3d6e5dfdbe9