纯净、安全、绿色的下载网站

首页|软件分类|下载排行|最新软件|IT学院

当前位置:首页IT学院IT技术

Python编写命令行工具 Python编程编写完善的命令行工具

somenzz   2021-09-14 我要评论
想了解Python编程编写完善的命令行工具的相关内容吗somenzz在本文为您仔细讲解Python编写命令行工具的相关知识和一些Code实例欢迎阅读和指正我们先划重点:Python编程,Python编写命令行工具下面大家一起来学习吧

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编写完善的命令行工具的资料请关注其它相关文章!


相关文章

猜您喜欢

  • Vue.js 实现tab切换并变色 Vue.js 实现tab切换并变色操作讲解

    想了解Vue.js 实现tab切换并变色操作讲解的相关内容吗Q_xyue在本文为您仔细讲解Vue.js 实现tab切换并变色的相关知识和一些Code实例欢迎阅读和指正我们先划重点:vue.js,tab页切换,vue.js,tab页切换变色下面大家一起来学习吧..
  • SpringBoot多表查询 SpringBoot进行多表查询功能的实现

    想了解SpringBoot进行多表查询功能的实现的相关内容吗vid在本文为您仔细讲解SpringBoot多表查询的相关知识和一些Code实例欢迎阅读和指正我们先划重点:SpringBoot多表查询,SpringBoot查询下面大家一起来学习吧..

网友评论

Copyright 2020 www.sopisoft.net 【绿软下载站】 版权所有 软件发布

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 点此查看联系方式