Python编程编写完善的命令行工具
目录
- 1. python-fire
- 2. mando
- 最后的话
1. python-fire python-fire 是一个三方库,可以将任何 Python 对象变成一个命令行接口。
使用前先
pip install fire
下。可以把你的函数直接变成命令行接口:
import firedef hello(name="World"):return "Hello %s!" % nameif __name__ == '__main__':fire.Fire(hello)
然后在命令行,就可以执行这些命令:
python hello.py# Hello World!python hello.py --name=David# Hello David!python hello.py --help# Shows usage information.
也可以把可以把你的类直接变成命令行接口:
import fireclass Calculator(object):"""A simple calculator class."""def double(self, number):return 2 * numberif __name__ == '__main__':fire.Fire(Calculator)
然后就可以这样执行:
python calculator.py double 10# 20python calculator.py double --number=15# 30
除此之外,还有这样的功能:
执行后自动进入交互模式:
command -- --interactive比如:
文章图片
查看执行的调用顺序:
python arg_demo2.py double 10 -- --trace结果如下:
文章图片
还可以为你生成 shell 自动补全命令的脚本,真的很贴心:
python arg_demo2.py double 10 -- --completion
2. mando mando 是一个基于 argparse 的装饰器,可以让你在几秒内编写出一个灵活、可维护的命令行工具。
使用前先
pip install mando
下。用法:
example.py
from mando import command, main@commanddef echo(text, capitalize=False):'''Echo the given text.'''if capitalize:text = text.upper()print(text)if __name__ == '__main__':main()
命令行用法:
$ python example.py -husage: example.py [-h] {echo} ...positional arguments:{echo}echoEcho the given text.optional arguments:-h, --helpshow this help message and exit$ python example.py echo -husage: example.py echo [-h] [--capitalize] textEcho the given text.positional arguments:textoptional arguments:-h, --helpshow this help message and exit--capitalize
真实执行结果:
$ python example.py echo spamspam$ python example.py echo --capitalize spamSPAM
再复杂一点的:
from mando import command, main@commanddef push(repository, all=False, dry_run=False, force=False, thin=False):'''Update remote refs along with associated objects.:param repository: Repository to push to.:param --all: Push all refs.:param -n, --dry-run: Dry run.:param -f, --force: Force updates.:param --thin: Use thin pack.'''print ('Pushing to {0}. All: {1}, dry run: {2}, force: {3}, thin: {4}'.format(repository, all, dry_run, force, thin))if __name__ == '__main__':main()
mando 可以理解 Sphinx 风格的文档字符串中的 :
param
参数说明,因此可以显示帮助文档。$ python git.py push -h
usage: git.py push [-h] [--all] [-n] [-f] [--thin] repository
Update remote refs along with associated objects.
positional arguments:
repositoryRepository to push to.
optional arguments:
-h, --helpshow this help message and exit
--allPush all refs.
-n, --dry-runDry run.
-f, --forceForce updates.
--thinUse thin pack.
mando 还可以理解 Python3 的类型提示,因此传错了参数,也会有报错提示:
from mando import command, main@commanddef duplicate(string, times: int):'''Duplicate text.:param string: The text to duplicate.:param times: How many times to duplicate.'''print(string * times)if __name__ == '__main__':main()
执行:
$ python3 test.py duplicate "test " 5test test test test test$ python3 test.py duplicate "test " foousage: test.py duplicate [-h] string timestest.py duplicate: error: argument times: invalid int value: 'foo'
最后的话 【Python编程编写完善的命令行工具】本文分享编写建命令行工具的三方库,使用起来非常简单,我也是偶然在 GitHub 搜索到的,写代码前先在 GitHub 上搜一下真的是一个很好的习惯,以上就是Python编程编写完善的命令行工具的详细内容,更多关于Python编写完善的命令行工具的资料请关注脚本之家其它相关文章!
推荐阅读
- python学习之|python学习之 实现QQ自动发送消息
- 标签、语法规范、内联框架、超链接、CSS的编写位置、CSS语法、开发工具、块和内联、常用选择器、后代元素选择器、伪类、伪元素。
- 逻辑回归的理解与python示例
- python自定义封装带颜色的logging模块
- 【Leetcode/Python】001-Two|【Leetcode/Python】001-Two Sum
- Python基础|Python基础 - 练习1
- Python爬虫|Python爬虫 --- 1.4 正则表达式(re库)
- Python(pathlib模块)
- python青少年编程比赛_第十一届蓝桥杯大赛青少年创意编程组比赛细则
- Python数据分析(一)(Matplotlib使用)