玩转 Python 命令行:4 大主流工具库的对比

在这里插入图片描述
在这里插入图片描述

import argparse

# 1. 设置解析器
parser = argparse.ArgumentParser(description='Calculator Program.')

# 2. 定义参数
# 添加位置参数 nums,在帮助信息中显示为 num
# 其类型为 int,且支持输入多个,且至少需要提供一个
parser.add_argument('nums',  metavar='num', type=int, nargs='+',
                    help='a num for the accumulator')
# 添加选项参数 --sum,该参数被 parser 解析后所对应的属性名为 accumulate
# 若不提供 --sum,默认值为 max 函数,否则为 sum 函数
parser.add_argument('--sum', dest='accumulate', action='store_const',
                    const=sum, default=max,
                    help='sum the nums (default: find the max)')


# 3. 解析参数
args = parser.parse_args(['--sum', '1', '2', '3'])
print(args) # 结果:Namespace(accumulate=<built-in function sum>, nums=[1, 2, 3])

# 4. 业务逻辑
result = args.accumulate(args.nums)
print(result)  # 基于上文的 ['--sum', '1', '2', '3'] 参数,accumulate 为 sum 函数,其结果为 6

在这里插入图片描述

# 1. 定义接口描述/帮助信息
"""Calculator Program.

Usage:
  calculator.py [--sum] <num>...
  calculator.py (-h | --help)

Options:
  -h --help     Show help.
  --sum         Sum the nums (default: find the max).
"""

from docopt import docopt

# 2. 解析命令行
arguments = docopt(__doc__, options_first=True, argv=['--sum', '1', '2', '3'])
print(arguments) # 结果:{'--help': False, '--sum': True, '<num>': ['1', '2', '3']}

# 3. 业务逻辑
nums = (int(num) for num in arguments['<num>'])

if arguments['--sum']:
    result = sum(nums)
else:
    result = max(nums)

print(result) # 基于上文的 ['--sum', '1', '2', '3'] 参数,处理函数为 sum 函数,其结果为 6

在这里插入图片描述

import sys
import click

sys.argv = ['calculator.py', '--sum', '1', '2', '3']

# 2. 定义参数
@click.command()
@click.argument('nums', nargs=-1, type=int)
@click.option('--sum', 'use_sum', is_flag=True, help='sum the nums (default: find the max)')
# 1. 业务逻辑
def calculator(nums, use_sum):
    """Calculator Program."""
    print(nums, use_sum) # 输出:(1, 2, 3) True
    if use_sum:
        result = sum(nums)
    else:
        result = max(nums)

    print(result) # 基于上文的 ['--sum', '1', '2', '3'] 参数,处理函数为 sum 函数,其结果为 6

calculator()

在这里插入图片描述

import sys
import fire

sys.argv = ['calculator.py', '1', '2', '3', '--sum']

builtin_sum = sum

# 1. 业务逻辑
# sum=False,暗示它是一个选项参数 --sum,不提供的时候为 False
# *nums 暗示它是一个能提供任意数量的位置参数
def calculator(sum=False, *nums):
    """Calculator Program."""
    print(sum, nums) # 输出:True (1, 2, 3)
    if sum:
        result = builtin_sum(nums)
    else:
        result = max(nums)

    print(result) # 基于上文的 ['1', '2', '3', '--sum'] 参数,处理函数为 sum 函数,其结果为 6


fire.Fire(calculator)

在这里插入图片描述
在这里插入图片描述
Python 的命令行库种类繁多、各具特色。结合上面的总结,可以选择出符合使用场景的库,如果几个库都符合,那么就根据你更偏爱的风格来选择。这些库都很优秀,其背后的思想很是值得我们学习和扩展。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值