python常用的命令行解析库

1、argparse

argparse是python自带的模块,要经历解析器初始化、参数定义、解析一套流程,使用起来有些繁琐。

一篇argparse使用的文章:https://www.cnblogs.com/yymn/p/8056487.html

argpase的使用:

class Calculator(object):
    """
    计算器
    """

    def add(self, x, y):
        """
        加法运算
        Args:
            x: 第一个操作数
            y: 第二个操作数
        """
        return x + y

    def sub(self, x, y):
        return x - y

    def multiply(self, x, y):
        return x * y

    def devide(self, x, y):
        assert y != 0, "y参数不正确"
        return x / y

if __name__ == "__main__":
    # 初始化解析器
    parser = argparse.ArgumentParser()
    # 定义参数
    parser.add_argument("action", choices=["add", "sub", "multiply", "devide"], help="操作")
    parser.add_argument("x", type=int, help="第一个操作数")
    parser.add_argument("y", type=int, help="第二个操作数")
    parser.add_argument("-v", "--verbose", help="显示详细信息", action="store_true")
    # 解析
    args = parser.parse_args()
    calculator = Calculator()
    if args.verbose:
        print "x=", args.x
        print "y=", args.y
        print "action=", args.action
    print "result:", getattr(calculator, args.action)(args.x, args.y)

 

2、click

Click 是flask作者用 Python 写的一个第三方模块,用于快速创建命令行。Click 相比于 Argparse,就好比 requests 相比于 urllib

Click 则是以装饰器的形式作用在目标函数中,要侵入函数本身,本质上还是对 argparse的一种改良作品。
一篇click使用的文章:http://python.jobbole.com/87111/

click的使用:

class Calculator(object):
    """
    计算器
    """

    def add(self, x, y):
        """
        加法运算
        Args:
            x: 第一个操作数
            y: 第二个操作数
        """
        return x + y

    def sub(self, x, y):
        return x - y

    def multiply(self, x, y):
        return x * y

    def devide(self, x, y):
        assert y != 0, "y参数不正确"
        return x / y

@click.command()  # 装饰一个函数,使之成为命令行接口
@click.option("--verbose", type=click.BOOL, default=False, help="Show verbose info.")  # 定义选项,help还不支持中文,报编码问题
@click.argument("action", type=click.Choice(["add", "sub", "multiply", "devide"]))  # 定义固定参数
@click.argument("x", type=click.INT)
@click.argument("y", type=click.INT)
def calc(action, x, y, verbose):
    calculator = Calculator()
    if verbose:
        print "x=", x
        print "y=", y
        print "action=", action
    print "result:", getattr(calculator, action)(x, y)

if __name__ == "__main__":
    calc()

 

3、fire

fire 这个命令行解析工具非常牛逼,把命令行工具做到了极致,算是一种颠覆式创新,

一行代码能把函数导出到命令行窗口,该项目是 Google工程师开源的 Python 库,虽然代码放到了google官方账号下,但是项目主页申明说它不是 Google 官方项目。

fire使用文档:https://github.com/google/python-fire/blob/master/docs/guide.md

fire的使用:

# 用法1: fire.Fire()
# 直接在程序中调用 fire.Fire(),不需要修改目标函数,fire 会把当前模块下的所有对象导出到命令行中

def add(x, y):
    return x + y

def sub(x, y):
    return x - y

hello = "hello world"

if __name__ == "__main__":
    fire.Fire()



# 用法2: fire.Fire(<fn>)
# Fire 可以指定某个函数导出到命令行

def add(x, y):
    return x + y

if __name__ == "__main__":
    fire.Fire(add)  # 当 Fire 接收函数 add 作为参数时,只加载 add 函数到命令行中,此时,在命令行中运行时也无需再指定函数名字,只需要指定参数就好。



# 用法3:fire.Fire(<dict>)
# Fire 不仅可以接收函数,还可以接收字典对象作为参数,可在字典中配置那些函数需要导出到命令行中。例如,有加减乘3个函数,我们可以选择性的选择其中2个导出到命令行。

def add(x, y):
    return x + y

def sub(x, y):
    return x - y

def test():
    return "test"

if __name__ == "__main__":
    fire.Fire({
        "add": add, 
        "sub": sub
    })



# 用法4:fire.Fire(<object>)
# Fire 还可以接收类的实例对象

if __name__ == "__main__":
    calculator = Calculator()
    fire.Fire(calculator)



# 用法5:fire.Fire(class)
# Fire 还可以接收一个类作为参数

if __name__ == "__main__":
    fire.Fire(Calculator)

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值