Python编程编写完善的命令行工具
程序员文章站
2022-03-23 23:23:09
目录1. python-firepython-fire 是一个三方库,可以将任何 python 对象变成一个命令行接口。使用前先 pip install fire 下。可以把你的函数直接变成命令行接口...
1. python-fire
python-fire 是一个三方库,可以将任何 python 对象变成一个命令行接口。
使用前先 pip install fire
下。
可以把你的函数直接变成命令行接口:
import fire def hello(name="world"): return "hello %s!" % name if __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 fire class calculator(object): """a simple calculator class.""" def double(self, number): return 2 * number if __name__ == '__main__': fire.fire(calculator)
然后就可以这样执行:
python calculator.py double 10 # 20 python 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 @command def echo(text, capitalize=false): '''echo the given text.''' if capitalize: text = text.upper() print(text) if __name__ == '__main__': main()
命令行用法:
$ python example.py -h usage: example.py [-h] {echo} ... positional arguments: {echo} echo echo the given text. optional arguments: -h, --help show this help message and exit $ python example.py echo -h usage: example.py echo [-h] [--capitalize] text echo the given text. positional arguments: text optional arguments: -h, --help show this help message and exit --capitalize
真实执行结果:
$ python example.py echo spam spam $ python example.py echo --capitalize spam spam
再复杂一点的:
from mando import command, main @command def 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:
repository repository to push to.
optional arguments:
-h, --help show this help message and exit
--all push all refs.
-n, --dry-run dry run.
-f, --force force updates.
--thin use thin pack.
mando 还可以理解 python3 的类型提示,因此传错了参数,也会有报错提示:
from mando import command, main @command def 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 " 5 test test test test test $ python3 test.py duplicate "test " foo usage: test.py duplicate [-h] string times test.py duplicate: error: argument times: invalid int value: 'foo'
最后的话
本文分享编写建命令行工具的三方库,使用起来非常简单,我也是偶然在 github 搜索到的,写代码前先在 github 上搜一下真的是一个很好的习惯,以上就是python编程编写完善的命令行工具的详细内容,更多关于python编写完善的命令行工具的资料请关注其它相关文章!
推荐阅读
-
使用Python编写类UNIX系统的命令行工具的教程
-
由Python编写的MySQL管理工具代码实例
-
利用Python编写一个会员管理系统,沉迷于编程的世界里!
-
python3.6 +tkinter GUI编程 实现界面化的文本处理工具(推荐)
-
代码分享:用Python编写的多协议弱密码审计工具集
-
Python编写的爬虫工具案列分析
-
python如何编写类似nmap的扫描工具
-
【Android编程实战】利用apktool编写apk的dex加壳工具
-
python编程:输入一个正整数n,编写程序计算如下数列的值1-2+3-4+5.。。。+n(或-n)
-
python实现命令行工具jq的json路径过滤