Python docopt库:一款简化命令行参数解析工具

部署运行你感兴趣的模型镜像

0c7e0eb2b6f7bebcc5ff06041f2b3a99.png

更多Python学习内容:ipengtao.com

命令行接口(CLI)是现代软件开发中不可或缺的一部分,它使得开发者可以通过终端高效地与程序交互。然而,为CLI解析命令行参数常常是一项繁琐的任务。docopt 是一个简洁且强大的 Python 库,旨在通过简单的文档字符串描述 CLI 的行为,自动完成命令行参数解析。它无需手动编写复杂的解析逻辑,只需描述程序的使用说明即可快速实现参数解析。

安装

要使用 docopt,首先需要安装该库。

使用 pip 安装非常简单:

pip install docopt

安装完成后,可以通过以下代码验证是否安装成功:

import docopt
print(docopt.__version__)

如果成功输出版本号,则表示安装完成。

主要功能

docopt 的核心功能是通过解析文档字符串来生成命令行参数解析逻辑。

以下是其主要特点:

  • 直观的文档驱动开发:解析逻辑直接来源于文档字符串。

  • 支持多种参数类型:包括选项、必需参数、可选参数和子命令。

  • 易于扩展:适合构建复杂的CLI工具。

  • 简单易用:使用几行代码即可实现完整的命令行接口。

这些特点使得 docopt 成为构建命令行工具的理想选择。

基础用法

一个简单的命令行工具

以下是一个用 docopt 构建的简单CLI示例,该工具支持显示版本信息和执行简单的“问候”操作。

"""
Simple CLI Tool.

Usage:
  cli.py greet <name>
  cli.py (-h | --help)
  cli.py --version

Options:
  -h --help     Show this screen.
  --version     Show version.

"""
from docopt import docopt

if __name__ == '__main__':
    args = docopt(__doc__, version='Simple CLI Tool 1.0')
    if args['greet']:
        print(f"Hello, {args['<name>']}!")
工作原理:
  1. 文档字符串:CLI的行为被清晰地描述在文档字符串中,包括用法和选项。

  2. docopt 函数:解析文档字符串,并返回解析后的参数字典。

  3. 参数字典:通过字典键访问命令和参数。

运行以下命令可以测试功能:

python cli.py greet Alice
# 输出: Hello, Alice!
python cli.py --version
# 输出: Simple CLI Tool 1.0

必须参数和可选参数

docopt 支持定义必需参数和可选参数。以下是一个示例:

"""
Calculator.

Usage:
  calc.py add <x> <y>
  calc.py sub <x> <y>
  calc.py (-h | --help)

Options:
  -h --help     Show this screen.
"""
from docopt import docopt

if __name__ == '__main__':
    args = docopt(__doc__)
    x = int(args['<x>'])
    y = int(args['<y>'])

    if args['add']:
        print(f"Result: {x + y}")
    elif args['sub']:
        print(f"Result: {x - y}")

运行以下命令可以测试功能:

python calc.py add 5 3
# 输出: Result: 8

python calc.py sub 10 4
# 输出: Result: 6

进阶用法

使用默认值

docopt 支持为选项提供默认值。

以下示例展示了如何为一个选项设置默认值:

"""
File Reader.

Usage:
  file_reader.py [--lines=<n>]

Options:
  --lines=<n>  Number of lines to read [default: 10].
"""
from docopt import docopt

if __name__ == '__main__':
    args = docopt(__doc__)
    lines = int(args['--lines'])
    print(f"Reading {lines} lines...")

运行以下命令可以测试默认值功能:

python file_reader.py
# 输出: Reading 10 lines...

python file_reader.py --lines=20
# 输出: Reading 20 lines...

子命令支持

docopt 非常适合实现子命令功能,比如 git 命令的风格。

以下是一个支持子命令的示例:

"""
Task Manager.

Usage:
  task.py add <task>
  task.py list
  task.py (-h | --help)

Options:
  -h --help     Show this screen.
"""
from docopt import docopt

tasks = []

if __name__ == '__main__':
    args = docopt(__doc__)
    if args['add']:
        tasks.append(args['<task>'])
        print(f"Task added: {args['<task>']}")
    elif args['list']:
        print("Tasks:")
        for task in tasks:
            print(f"- {task}")

运行以下命令可以测试子命令功能:

python task.py add "Finish project"
# 输出: Task added: Finish project

python task.py list
# 输出:
# Tasks:
# - Finish project

参数验证和错误处理

可以结合 Python 的异常处理功能对参数进行验证:

"""
Age Verifier.

Usage:
  age_verifier.py <age>

"""
from docopt import docopt

if __name__ == '__main__':
    args = docopt(__doc__)
    try:
        age = int(args['<age>'])
        if age < 0:
            raise ValueError("Age cannot be negative.")
        print(f"Your age is {age}.")
    except ValueError as e:
        print(f"Error: {e}")

运行以下命令可以测试错误处理功能:

python age_verifier.py 25
# 输出: Your age is 25.

python age_verifier.py -5
# 输出: Error: Age cannot be negative.

python age_verifier.py abc
# 输出: Error: invalid literal for int() with base 10: 'abc'

实际应用

开发多功能命令行工具

以下是一个综合示例,展示了如何使用 docopt 构建一个多功能CLI工具:

"""
Utility CLI.

Usage:
  utility.py greet <name>
  utility.py calc add <x> <y>
  utility.py calc sub <x> <y>
  utility.py (-h | --help)

Options:
  -h --help     Show this screen.
"""
from docopt import docopt

if __name__ == '__main__':
    args = docopt(__doc__)
    
    if args['greet']:
        print(f"Hello, {args['<name>']}!")
    elif args['calc']:
        x = int(args['<x>'])
        y = int(args['<y>'])
        if args['add']:
            print(f"Result: {x + y}")
        elif args['sub']:
            print(f"Result: {x - y}")

测试命令:

python utility.py greet Alice
# 输出: Hello, Alice!

python utility.py calc add 10 5
# 输出: Result: 15

python utility.py calc sub 20 8
# 输出: Result: 12

总结

docopt 是一个简单但功能强大的命令行参数解析工具。通过文档字符串驱动的解析方式,它极大地简化了开发CLI工具的流程。无论是处理简单的选项,还是支持复杂的子命令,docopt 都能提供直观且高效的解决方案。

如果你觉得文章还不错,请大家 点赞、分享、留言 下,因为这将是我持续输出更多优质文章的最强动力!


我们还为大家准备了Python资料,感兴趣的小伙伴快来找我领取一起交流学习哦!

cd7f519ff1d5fd4074fe78fdb34440e5.jpeg

往期推荐

Python基础学习常见的100个问题.pdf(附答案)

Python办公自动化完全指南(免费PDF)

Python Web 开发常见的100个问题.PDF

Beautiful Soup快速上手指南,从入门到精通(PDF下载)

124个Python案例,完整源代码!

80个Python数据分析必备实战案例.pdf(附代码),完全开放下载

120道Python面试题.pdf ,完全版开放下载

全网最全 Pandas的入门与高级教程全集,都在这里了!(PDF下载)

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

编号 文件名称 cwts-specs-001 IMT-DS FDD(WCDMA)系统无线接口物理层技术规范:名语术语 cwts-specs-002 IMT-DS FDD(WCDMA)系统无线接口物理层技术规范:概述 cwts-specs-003 IMT-DS FDD(WCDMA)系统无线接口物理层技术规范:物理信道和传输信道到物理信道的映射 cwts-specs-004 IMT-DS FDD(WCDMA)系统无线接口物理层技术规范:信道编码与复用 cwts-specs-005 IMT-DS FDD(WCDMA)系统无线接口物理层技术规范:扩频与调制 cwts-specs-006 IMT-DS FDD(WCDMA)系统无线接口物理层技术规范:物理层过程 cwts-specs-007 IMT-DS FDD(WCDMA)系统无线接口物理层技术规范:物理层测量 cwts-specs-008 IMT-DS FDD(WCDMA)系统无线接口层2技术规范:物理层向上层提供的服务 cwts-specs-009 IMT-DS FDD(WCDMA)系统无线接口层2技术规范:MAC协议 cwts-specs-010 IMT-DS FDD(WCDMA)系统无线接口层2技术规范:RLC协议 cwts-specs-011 IMT-DS FDD(WCDMA)系统无线接口层2技术规范:PDCP协议 cwts-specs-012 IMT-DS FDD(WCDMA)系统无线接口层2技术规范:BMC协议 cwts-specs-013 IMT-DS FDD(WCDMA)系统无线接口层3技术规范:RRC协议 cwts-specs-014 IMT-DS FDD(WCDMA)系统Iu接口技术规范:概述 cwts-specs-015 IMT-DS FDD(WCDMA)系统Iu接口技术规范:层1技术要求 cwts-specs-016 IMT-DS FDD(WCDMA)系统Iu接口技术规范:信令传输 cwts-specs-017 IMT-DS FDD(WCDMA)系统Iu接口技术规范:RANAP信令 cwts-specs-018 IMT-DS FDD(WCDMA)系统Iu接口技术规范:数据传输和传输信令 cwts-specs-019 IMT-DS FDD(WCDMA)系统Iu接口技术规范:用户平面协议 cwts-specs-020 IMT-DS FDD(WCDMA)系统Iub接口技术规范:概述 cwts-specs-021 IMT-DS FDD(WCDMA)系统Iub接口技术规范:层1技术要求 cwts-specs-022 IMT-DS FDD(WCDMA)系统Iub接口技术规范:信令传输 cwts-specs-023 IMT-DS FDD(WCDMA)系统Iub接口技术规范:NBAP信令 cwts-specs-024 IMT-DS FDD(WCDMA)系统Iub接口技术规范:用于CCH数据流的数据传输和传输信令 cwts-specs-025 IMT-DS FDD(WCDMA)系统Iub接口技术规范:用于CCH数据流的用户平面协议 cwts-specs-026 IMT-DS FDD(WCDMA)系统Iur接口技术规范:概述 cwts-specs-027 IMT-DS FDD(WCDMA)系统Iur接口技术规范:层1技术要求 cwts-specs-028 IMT-DS FDD(WCDMA)系统Iur接口技术规范:信令传输 cwts-specs-029 IMT-DS FDD(WCDMA)系统Iur接口技术规范:RNSAP信令 cwts-specs-030 IMT-DS FDD(WCDMA)系统Iur接口技术规范:用于CCH数据流的数据传输和传输信令 cwts-specs-031 IMT-DS FDD(WCDMA)系统Iur接口技术规范:用于CCH数据流的用户平面协议 cwts-specs-032 IMT-DS FDD(WCDMA)系统Iub/Iur接口技术规范:用于DCH数据流的数据传输和传输信令 cwts-specs-033 IMT-DS FDD(WCDMA)系统Iub/Iur接口技术规范:用于DCH数据流的用户平面协议 cwts-specs-034 TD-SCDMA系统无线接口物理层技术规范 cwts-specs-035 TD-SCDMA系统无线接口层2技术规范 cwts-specs-036 TD-SCDMA系统无线接口层3-RRC技术规范 cwts-specs-037 TD-SCDMA系统Iu接口技术规范 cwts-specs-038 TD-SCDMA系统Iub接口技术规范 cwts-specs-039 TD-SCDMA系统Iur接口技术规范 cwts-specs-040 TD-SCDMA系统基站设备无线收发特性技术规范 cwts-specs-041 TD-SCDMA系统用户终端设备无线收发特性技术规范 CWTS发布的研究报告列表 cwts-reports-001 IMT-DS FDD(WCDMA)系统连接模式下的层间过程(25.303)标准研究报告 cwts-reports-002 IMT-DS FDD(WCDMA)系统空闲模式下UE的流程和连接模式下小区重选流程(25.304)标准研究报告 cwts-reports-003 IMT-DS FDD(WCDMA)系统无线资源管理RRM研究报告 cwts-reports-004 IMT-DS FDD(WCDMA)系统无线资源管理RRM研究报告 cwts-reports-005 IMT-DS FDD(WCDMA)系统UE无线接入能力研究报告
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值