网络编程
位置:首页>> 网络编程>> Python编程>> Python编程编写完善的命令行工具

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

作者:somenzz  发布时间:2023-08-02 11:22:56 

标签: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编程编写完善的命令行工具

查看执行的调用顺序:

python arg_demo2.py double 10 -- --trace

结果如下:

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

还可以为你生成 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编程编写完善的命令行工具的详细内容!

来源:https://blog.csdn.net/somenzz/article/details/118166073

0
投稿

猜你喜欢

  • 导读:SQL Server数据迁移的知识之前已经为大家介绍了很多,比如SQL Server数据库迁移方法,接下来就为大家详细介绍SQL Se
  • Mysql默认是不可以通过远程机器访问的,通过下面的配置可以开启远程访问.我的Mysql环境是ubuntu+mysql51.修改/etc/m
  • 原文地址:30 Days of Mootools 1.2 Tutorials - Day 7 - Set and Get Style Pro
  • 以XML格式查看查询结果通过使用传统—xml 选项调用MySQL命令行客户程序,你可以以XML格式(而不是传统的列表形式
  • 淘宝商城的 detail 页面“产品详情”部分是商家自定义区块,曾出现这样一个问题:推荐:css行高:line-height属性详解 <
  • 前言:在搭建开始前,我们先来梳理下web服务工作流程,先看下图:1、用户(PC)向web服务器发起http请求2、web服务器判断用户请求文
  • 如何定义记录集打开的游标类型和锁定类型?我们知道,打开记录集时,可以定义记录集打开的游标类型和锁定类型。在adovbs.inc文件中就定义了
  • 1.触发器概述触发器是SQL Server数据库应用中一个重要工具,是一种特殊类型的存储过程,应用非常广泛。一般存储过程主要通过存储过程名而
  • 需要的软件phpStudy 用来导入一个数据库api-server 数据库功能可以开启一个服务器,让开发环境可以使用生产环境的网址请求安装
  • 头疼的挂马事件申请了个免费空间弄了个小站空间还可以二年多了挺稳定的只是从今年年初开始网页老莫名奇妙的被人挂马仔细检查了网站 不存在什么漏洞应
  • 在我们开始一个项目的设计的时候,脑子里肯定有无数的构想。是做视觉冲击强烈、夺人眼球的绚丽风格?还是复古的拼贴风?又或者目前最in的极简主义设
  • 近段时间看了一些论坛上面关于分页的ASP程序依然有许多的关注者,但里面只有代码,没有详细的解释,对于初学者来说,这样总是得不到真正的掌握,此
  • [参与测试的浏览器:IE6 / IE7 / IE8 / FF3 / OP9.6 / SF3 / Chrome2 ][操作系统:Windows
  • Hi, 大家好~ 好久没有发有营养的东西,今天就扔一篇最近热点的Google Chrome 浏览器的试用心得吧。先说个比较搞的事情,Goog
  • 本文实例讲述了php使用Cookie实现和用户会话的方法。分享给大家供大家参考。具体分析如下:PHP 包含了很多的函数,可以用来管理和记录用
  • 年前在重写淘宝旺铺里的会员卡脚本的时候,无意中发现了一个有趣的事情。代码类似:var associative_array = new Arr
  • asp之家注:学习javascript(js),免不了要用到打开新窗口,方法很多,总的来说是使用window.open。不同与HTML中的t
  • 两个并发事务同时访问数据库表相同的行时,可能存在以下三个问题:1、幻想读:事务T1读取一条指定where条件的语句,返回结果集。此时事务T2
  • 1.彻底弄懂CSS盒子模式一(DIV布局快速入门)3.彻底弄懂CSS盒子模式三(浮动的表演和清除的自述) 4.彻底弄懂CSS盒子模式四(绝对
  • 什么是JSON http://www.json.org/json-zh.htmlJSON(Javascript Object Notatio
手机版 网络编程 asp之家 www.aspxhome.com