开云-BPO行业整合方案提供者
专业化、科技化、国际化;高标准、广覆盖、全流程
了解更多Google 开源的 Python 号令行库:fire 实现 git 号令 时候:2024-12-13 21:20:10 手机看文章
扫描二维码随时随地手机看文章
1、媒介
在前面三篇介绍 fire的文章中,我们周全领会了 fire壮大而不掉简练的能力。依照老例,我们要像利用 argparse、docopt和 click一样利用 fire来实现 git 号令。
本文的存眷点其实不在 git的各类号令是若何实现的,而是怎样利用 fire去打造一个适用号令行法式,代码布局是如何的。是以,和 git相干的操作,将会利用 gitpython库来简单实现。
为了让没读过 利用 xxx 实现 git 号令(xxx指 argparse、docopt和 click) 的小火伴也能读大白本文,我们仍会对 git经常使用号令和 gitpython做一个简单介绍。
本系列文章默许利用 Python 3 作为注释器进行讲授。若你仍在利用 Python 2,请留意二者之间语法和库的利用差别哦~2、git 经常使用号令
当你写好一段代码或增删一些文件后,会用以下号令查看文件状况:
git status
确认文件状况后,会用以下号令将的一个或多个文件(夹)添加到暂存区:
git add [pathspec [pathspec ...]]
然后利用以下号令提交信息:
git commit -m "your commit message"
最后利用以下号令将提交推送到长途仓库:
git push
我们将利用 fire和 gitpython库来实现这 4 个子号令。
3、关在 gitpythongitpython[1] 是一个和 git仓库交互的 Python 第三方库。我们将借用它的能力来实现真实的 git逻辑。
安装:
pip install gitpython4、思虑
在实现前,我们无妨先思虑下会用到 fire的哪些功能?全部法式的布局是如何的?
fire
git的 4 个子号令的实现其实对应在四个函数,我们可以都放到一个类中,实现四个实例方式。而对 git add号令,需要接管肆意个参数,在实例方式顶用 *pathspecs参数来表达。对 git commit号令,需要接管 -m选项,在实例方式顶用 m参数来表达。
法式布局
法式布局上:
实例化 Git对象,供全局利用 在 GitCli类中界说四个号令对应的实例方式 status、add、commit、push则根基布局以下:
import os import fire from git.cmd import Gitgit = Git(os.getcwd()) class GitCli: def status(self): """ 处置 status 号令 """ pass def add(self, *pathspecs): """ 处置 add 号令 """ pass def commit(self, m): """ 处置 -m号令 """ pass def push(self): """ 处置 push 号令 """ pass if __name__ == '__main__': fire.Fire(GitCli())
下面我们将一步步地实现我们的 git法式。
5、实现假定我们在 fire-git.py[2] 文件中实现我们的 git法式。
5.1 status 子号令status子号令不接管任何参数和选项,是以 status方式无需任何入参。
class GitCli: def status(self): """ 处置 status 号令 """ cmd = ['git', 'status'] output = git.execute(cmd) return output
不难看出,我们最后挪用了真实的 git status来实现,并打印了输出。
5.2 add 子号令add子号令相对 status子号令,需要接管肆意个 pathspec 参数,是以 add方式需要增添 *pathspecs入参。fire 终究传入的是一个元组,我们需要将其转换成 list 以便后续处置。
class GitCli: def add(self, *pathspecs): """ 处置 add 号令 """ cmd = ['git', 'add'] + list(pathspecs) output = git.execute(cmd) return output
当我们履行 python3 fire-git.py add --help时,成果以下:
INFO: Showing help with the command 'fire-git.py add -- --help'.NAME fire-git.py add - 处置 add 号令SYNOPSIS fire-git.py add [PATHSPECS]...DESCRIPTION 处置 add 号令POSITIONAL ARGUMENTS PATHSPECS5.3 commit 子号令
commit子号令相对 status子号令,需要接管 -m选项,是以 commit方式需要增添 m入参。
class GitCli: def commit(self, m): """ 处置 -m号令 """ cmd = ['git', 'commit', '-m', m] output = git.execute(cmd) return output5.4 push 子号令
push子号令同 status子号令一样,不接管任何参数和选项,是以 push方式无需任何入参。
class GitCli: def push(self): """ 处置 push 号令 """ cmd = ['git', 'push'] output = git.execute(cmd) return output
至此,我们就实现了一个简单的 git号令行,利用 python fire-git.py status即可查询项目状况。
很是便利的是,每一个号令函数的 docstring都将作为这个号令的帮忙信息,是以,当我们履行 python3 fire-git.py --help会主动生成以下帮忙内容:
INFO: Showing help with the command 'fire-git.py -- --help'.NAME fire-git.pySYNOPSIS fire-git.py COMMANDCOMMANDS COMMAND is one of the following: add 处置 add 号令 commit 处置 -m号令 push 处置 push 号令 status 处置 status 号令
想看全部源码,请戳 fire-git.py[3] 。
6、小结本文简单介绍了平常工作中经常使用的 git号令,然后提出实现它的思绪,终究一步步地利用 fire和 gitpython实现了 git法式。
对照 argparse、docopt和 click的实现版本,你会发现利用 fire来实现是最简单的:
相较在 argparse,子解析器、参数类型甚么的十足不需要关心 相较在 docopt,参数解析和号令挪用处置也不需要关心 相较在 click,装潢器所界说的号令行参数信息也必需要关心无疑,fire把能简化的都简化了,的确就是懒人福音。
关在 fire的讲授将告一段落,回首下 fire的至简之道,你会深爱上它。这也表现出了 Python 之美。
此刻,你已学会了四个特点各别的主流号令行解析库的利用了,不再需要为号令行法式的实现而懊恼了。
欲知详情,请下载word文档 下载文档