杰瑞科技汇

Python命令行怎么用?

概览:Python 命令行处理方案

方法 适用场景 优点 缺点
sys.argv 简单脚本,少量参数 无需安装库,Python 内置 功能有限,解析麻烦,无法生成帮助信息
argparse 推荐,绝大多数场景 功能强大,自动生成帮助信息,支持子命令 代码稍显冗长
click 构建复杂、优雅的 CLI 工具 代码简洁,易于扩展,支持装饰器 需要安装第三方库
typer 现代 CLI,基于 clicktype hints 代码极简,类型安全,自动生成文档 需要安装第三方库

sys.argv - 最基础的方式

这是 Python 内置的方法,直接获取命令行传入的所有参数,并以列表的形式存储在 sys.argv 中。

Python命令行怎么用?-图1
(图片来源网络,侵删)
  • sys.argv[0]:永远是脚本自身的名称。
  • sys.argv[1]:第一个参数,以此类推。

示例: 创建一个文件 add.py

# add.py
import sys
# 检查参数数量是否正确
if len(sys.argv) != 3:
    print("用法: python add.py <数字1> <数字2>")
    sys.exit(1) # 退出程序,返回错误码1
try:
    # 将参数从字符串转换为整数
    num1 = int(sys.argv[1])
    num2 = int(sys.argv[2])
    result = num1 + num2
    print(f"结果是: {result}")
except ValueError:
    print("错误:请输入有效的数字。")

如何运行:

# 正确运行
python add.py 10 20
# 输出: 结果是: 30
# 参数错误
python add.py 10
# 输出: 用法: python add.py <数字1> <数字2>
# 类型错误
python add.py ten twenty
# 输出: 错误:请输入有效的数字。

适合非常简单的脚本,但一旦参数变多或需要更复杂的功能(如可选参数 -v),sys.argv 会变得非常难用。


argparse - Python 标准库,功能强大

argparse 是 Python 标准库的一部分,是构建命令行界面的推荐方式,它能自动生成帮助信息、处理参数类型、可选参数、位置参数等。

Python命令行怎么用?-图2
(图片来源网络,侵删)

核心概念:

  • ArgumentParser: 创建解析器对象。
  • add_argument(): 添加参数定义。
    • 位置参数: 必须提供的参数。
    • 可选参数: 带 或 前缀的参数。
    • 动作: 如 store_true (布尔开关), count (计数)。

示例: 创建一个文件 greet.py

# greet.py
import argparse
# 1. 创建解析器
parser = argparse.ArgumentParser(
    description="一个简单的问候程序",
    epilog="感谢使用!"
)
# 2. 添加参数
# 添加一个位置参数 'name'
parser.add_argument("name", type=str, help="要问候的人的名字")
# 添加一个可选参数 '--age',类型为整数
parser.add_argument("--age", type=int, help="被问候者的年龄")
# 添加一个布尔开关式可选参数 '--verbose'
parser.add_argument("-v", "--verbose", action="store_true", help="显示更详细的问候信息")
# 3. 解析参数
args = parser.parse_args()
# 4. 使用参数
if args.verbose:
    print(f"正在向 {args.name}({args.age}岁)进行详细问候...")
    print(f"你好,{args.name}!祝你今天过得愉快!")
else:
    print(f"你好, {args.name}!")

如何运行:

# 显示帮助信息 (自动生成)
python greet.py -h
# 输出:
# usage: greet.py [-h] [--age AGE] [-v] name
# 一个简单的问候程序
# positional arguments:
#   name                 要问候的人的名字
# options:
#   -h, --help           show this help message and exit
#   --age AGE            被问候者的年龄
#   -v, --verbose        显示更详细的问候信息
# 感谢使用!
# 基本用法
python greet.py Alice
# 输出: 你好, Alice!
# 使用可选参数
python greet.py Bob --age 30
# 输出: 你好, Bob!
# 使用布尔开关
python greet.py Charlie -v
# 输出:
# 正在向 Charlie(None岁)进行详细问候...
# 你好,Charlie!祝你今天过得愉快!
# 组合使用
python greet.py David --age 25 -v
# 输出:
# 正在向 David(25岁)进行详细问候...
# 你好,David!祝你今天过得愉快!

argparse 非常强大,是 Python 开发者必须掌握的工具,对于绝大多数项目来说,它已经足够。

Python命令行怎么用?-图3
(图片来源网络,侵删)

click - 第三方库,更简洁优雅

click 是一个非常流行的第三方库,旨在让编写命令行工具的过程变得快速、有趣和强大,它使用装饰器来定义命令,代码通常比 argparse 更简洁。

安装:

pip install click

示例: 创建一个文件 cli_tool.py

# cli_tool.py
import click
@click.command()
@click.option('--count', default=1, help='重复的次数。')
@click.option('--name', prompt='你的名字', help='要问候的对象。')
def hello(count, name):
    """一个简单的问候程序。"""
    for _ in range(count):
        click.echo(f"你好, {name}!")
if __name__ == '__main__':
    hello()

如何运行:

# 运行程序,它会提示你输入名字
python cli_tool.py
# 输出: 你的名字: Alice
#       你好, Alice!
# 使用选项
python cli_tool.py --count 3 --name Bob
# 输出: 你好, Bob!
#       你好, Bob!
#       你好, Bob!
# 查看帮助
python cli_tool.py --help
# 输出:
# Usage: cli_tool.py [OPTIONS]
#
#   一个简单的问候程序。
#
# Options:
#   --count INTEGER  重复的次数。
#   --name TEXT      要问候的对象。
#   --help           Show this message and exit.

click 的代码更易于阅读和维护,特别适合构建复杂的、多命令的 CLI 工具。


typer - 现代 CLI 的未来

typer 是一个基于 click 的新兴库,最大的特点是充分利用 Python 的 类型提示 (Type Hints),这使得你的代码不仅是文档,还能被工具(如 IDE)检查,并且可以自动生成漂亮的文档。

安装:

pip install typer

示例: 创建一个文件 modern_cli.py

# modern_cli.py
import typer
from typing import Optional
app = typer.Typer()
@app.command()
def hello(
    name: str = typer.Option(..., help="要问候的人的名字"),
    age: Optional[int] = typer.Option(None, help="被问候者的年龄"),
    verbose: bool = typer.Option(False, "--verbose", help="显示详细信息"),
):
    """
    一个使用类型提示的现代化问候程序。
    """
    if verbose:
        if age:
            typer.echo(f"正在向 {name}({age}岁)进行详细问候...")
        else:
            typer.echo(f"正在向 {name} 进行详细问候...")
    else:
        typer.echo(f"你好, {name}!")
if __name__ == "__main__":
    app()

如何运行:

# 运行,会自动提示你输入没有默认值的参数
python modern_cli.py
# 输出: 请输入 name: Charlie
# 使用选项
python modern_cli.py --name David --age 40 --verbose
# 输出: 正在向 David(40岁)进行详细问候...
# 查看帮助
python modern_cli.py --help
# 输出非常美观,并且是基于你的类型提示自动生成的。

如果你喜欢现代 Python 的写法,并且重视代码的类型安全和可读性,typer 是一个绝佳的选择。


如何选择?

  • 新手或简单脚本:从 sys.argv 开始,了解基本概念。
  • 绝大多数情况使用 argparse,它是标准库,功能足够强大,无需额外安装。
  • 追求代码简洁和优雅:使用 click,特别是当你需要构建一个复杂的、多命令的 CLI 工具时。
  • 拥抱现代 Python 和类型安全:选择 typer,它是未来的趋势,能写出非常健壮和清晰的代码。
分享:
扫描分享到社交APP
上一篇
下一篇