Python脚本如何解析命令行参数

wen 实用脚本 1

本文目录导读:

Python脚本如何解析命令行参数

  1. sys.argv(最简单的方式)
  2. argparse(推荐,功能强大)
  3. argparse 进阶用法
  4. getopt(较旧的方式)
  5. Click 库(第三方,非常易用)
  6. 推荐使用建议

在Python中解析命令行参数有多种方法,以下是几种常用方式:

sys.argv(最简单的方式)

import sys
# 获取所有命令行参数
print(f"脚本名称: {sys.argv[0]}")
print(f"所有参数: {sys.argv[1:]}")
# 示例用法
if len(sys.argv) > 1:
    for i, arg in enumerate(sys.argv[1:], 1):
        print(f"参数{i}: {arg}")

运行示例

python script.py arg1 arg2 arg3
# 输出: 参数1: arg1, 参数2: arg2, 参数3: arg3

argparse(推荐,功能强大)

import argparse
def main():
    # 创建解析器
    parser = argparse.ArgumentParser(description='描述你的程序功能')
    # 添加参数
    parser.add_argument('name', help='必填参数 - 你的名字')  # 位置参数
    parser.add_argument('-a', '--age', type=int, help='可选参数 - 年龄', default=18)
    parser.add_argument('-v', '--verbose', action='store_true', help='详细模式')
    parser.add_argument('-c', '--color', choices=['red', 'blue', 'green'], help='颜色选择')
    # 解析参数
    args = parser.parse_args()
    # 使用参数
    print(f"名字: {args.name}")
    print(f"年龄: {args.age}")
    if args.verbose:
        print("详细模式已开启")
    if args.color:
        print(f"选择的颜色: {args.color}")
if __name__ == "__main__":
    main()

运行示例

# 基本使用
python script.py 小明
# 带可选参数
python script.py 小明 --age 25 --verbose
# 使用短选项
python script.py 小明 -a 25 -v
# 查看帮助
python script.py -h

argparse 进阶用法

import argparse
def main():
    parser = argparse.ArgumentParser(description='命令行参数解析示例')
    # 不同类型的参数
    parser.add_argument('input', help='输入文件')
    parser.add_argument('-o', '--output', help='输出文件')
    parser.add_argument('-n', '--number', type=int, default=10, help='数量')
    parser.add_argument('--flag', action='store_true', help='标志位')
    # 列表参数
    parser.add_argument('--files', nargs='+', help='多个文件')
    # 必需参数
    parser.add_argument('--required-arg', required=True, help='必填参数')
    args = parser.parse_args()
    print(f"输入文件: {args.input}")
    print(f"数量: {args.number}")
    print(f"标志位: {args.flag}")
    if args.files:
        print(f"文件列表: {args.files}")
if __name__ == "__main__":
    main()

getopt(较旧的方式)

import getopt
import sys
def main():
    try:
        # 短选项: h 和 v 无值,n: 和 o: 需要值
        # 长选项: help 和 verbose 无值,name= 和 output= 需要值
        opts, args = getopt.getopt(sys.argv[1:], "hvn:o:", 
                                  ["help", "verbose", "name=", "output="])
    except getopt.GetoptError as err:
        print(f"错误: {err}")
        sys.exit(1)
    name = None
    output = None
    verbose = False
    for opt, arg in opts:
        if opt in ("-h", "--help"):
            print("用法: script.py [-h] [-v] [-n NAME] [-o OUTPUT]")
            sys.exit()
        elif opt in ("-v", "--verbose"):
            verbose = True
        elif opt in ("-n", "--name"):
            name = arg
        elif opt in ("-o", "--output"):
            output = arg
    print(f"名字: {name}")
    print(f"输出: {output}")
    print(f"详细模式: {verbose}")
if __name__ == "__main__":
    main()

Click 库(第三方,非常易用)

首先安装:

pip install click
import click
@click.command()
@click.argument('name')  # 位置参数
@click.option('--age', default=18, help='年龄')
@click.option('--verbose', is_flag=True, help='详细模式')
@click.option('--color', type=click.Choice(['red', 'blue', 'green']))
def main(name, age, verbose, color):
    """这是一个示例程序"""
    click.echo(f"名字: {name}")
    click.echo(f"年龄: {age}")
    if verbose:
        click.echo("详细模式已开启")
    if color:
        click.echo(f"颜色: {color}")
if __name__ == "__main__":
    main()

推荐使用建议

  • 简单脚本:使用 sys.argv
  • 中等复杂度:使用 argparse(标准库,功能完整)
  • 复杂CLI应用:使用 ClickFire
  • 维护旧代码:了解 getopt

argparse 是最推荐的方式,因为它:

  1. 是Python标准库,无需安装
  2. 自动生成帮助信息
  3. 支持类型检查和默认值
  4. 错误处理完善
  5. 文档丰富

抱歉,评论功能暂时关闭!