Python基础入门 Day94 使用argparse解析命令行参数

87次阅读
没有评论

共计 2367 个字符,预计需要花费 6 分钟才能阅读完成。

在实际开发中,我们经常需要编写可通过命令行运行的 Python 脚本。为了让脚本更加灵活和可配置,通常会通过命令行参数来控制脚本的行为。Python 提供了功能强大的 argparse 模块,可以方便地实现命令行参数的解析。

  1. 命令行参数的基本概念
    命令行参数就是运行脚本时附加在命令后的参数,例如:
python my_script.py input.txt output.txt

这里的 input.txtoutput.txt 就是传递给脚本的命令行参数。

  1. 使用 argparse 定义参数
    我们可以通过 argparse.ArgumentParser 来定义和解析参数:
import argparse

# 创建解析器
parser = argparse.ArgumentParser(description=" 示例:使用 argparse 解析参数 ")

# 添加参数
parser.add_argument("input", help=" 输入文件路径 ")
parser.add_argument("output", help=" 输出文件路径 ")

# 解析参数
args = parser.parse_args()

print(f" 输入文件: {args.input}")
print(f" 输出文件: {args.output}")

运行:

python script.py input.txt output.txt

输出:

 输入文件: input.txt
输出文件: output.txt
  1. 可选参数的定义
    除了位置参数,还可以定义带前缀的可选参数:
import argparse

parser = argparse.ArgumentParser(description=" 示例:可选参数 ")

# 添加可选参数
parser.add_argument("-v", "--verbose", action="store_true", help=" 显示详细信息 ")
parser.add_argument("-n", "--number", type=int, default=10, help=" 指定一个数字 ")

args = parser.parse_args()

if args.verbose:
    print(" 详细模式已启用 ")
print(f" 指定的数字是: {args.number}")

运行示例:

python script.py -v -n 20

输出:

 详细模式已启用
指定的数字是: 20
  1. 限制参数取值范围
    我们可以通过 choices 限制参数的取值范围:
import argparse

parser = argparse.ArgumentParser(description=" 示例:限制参数值 ")

parser.add_argument("--mode", choices=["fast", "normal", "slow"], default="normal", help=" 运行模式 ")

args = parser.parse_args()
print(f" 选择的模式是: {args.mode}")

运行:

python script.py --mode fast

输出:

 选择的模式是: fast
  1. 多值参数
    有些时候我们需要让参数接收多个值,可以使用 nargs
import argparse

parser = argparse.ArgumentParser(description=" 示例:多值参数 ")

parser.add_argument("--files", nargs="+", help=" 多个文件路径 ")

args = parser.parse_args()
print(f" 文件列表: {args.files}")

运行:

python script.py --files a.txt b.txt c.txt

输出:

 文件列表: ['a.txt', 'b.txt', 'c.txt']
  1. 结合实际案例:批量文件复制脚本
    下面我们实现一个简单的文件复制脚本,支持指定输入文件、输出目录,并选择是否启用详细模式:
import argparse
import shutil
import os

parser = argparse.ArgumentParser(description=" 批量文件复制工具 ")
parser.add_argument("files", nargs="+", help=" 需要复制的文件列表 ")
parser.add_argument("-o", "--output", required=True, help=" 输出目录 ")
parser.add_argument("-v", "--verbose", action="store_true", help=" 是否显示详细信息 ")

args = parser.parse_args()

# 确保输出目录存在
os.makedirs(args.output, exist_ok=True)

# 执行复制
for file in args.files:
    try:
        shutil.copy(file, args.output)
        if args.verbose:
            print(f" 成功复制: {file} -> {args.output}")
    except Exception as e:
        print(f" 复制 {file} 时出错: {e}")

运行示例:

python copy_files.py a.txt b.txt -o ./backup -v

输出:

 成功复制: a.txt -> ./backup
成功复制: b.txt -> ./backup

总结:
argparse 模块让 Python 脚本支持命令行参数,极大增强了脚本的灵活性。通过位置参数、可选参数、限制取值、多值参数等方式,我们可以轻松构建功能强大的命令行工具。

练习与思考:

  1. 编写一个命令行工具,支持对文本文件进行大小写转换。
  2. 使用 argparse 实现一个图片批量缩放工具,支持指定输入目录、输出目录和缩放比例。
  3. 在文件处理脚本中,增加 --log 参数,控制是否将日志写入文件。
正文完
 0
评论(没有评论)