共计 2367 个字符,预计需要花费 6 分钟才能阅读完成。
在实际开发中,我们经常需要编写可通过命令行运行的 Python 脚本。为了让脚本更加灵活和可配置,通常会通过命令行参数来控制脚本的行为。Python 提供了功能强大的 argparse 模块,可以方便地实现命令行参数的解析。
- 命令行参数的基本概念
命令行参数就是运行脚本时附加在命令后的参数,例如:
python my_script.py input.txt output.txt
这里的 input.txt 和 output.txt 就是传递给脚本的命令行参数。
- 使用
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
- 可选参数的定义
除了位置参数,还可以定义带前缀的可选参数:
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
- 限制参数取值范围
我们可以通过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
- 多值参数
有些时候我们需要让参数接收多个值,可以使用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']
- 结合实际案例:批量文件复制脚本
下面我们实现一个简单的文件复制脚本,支持指定输入文件、输出目录,并选择是否启用详细模式:
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 脚本支持命令行参数,极大增强了脚本的灵活性。通过位置参数、可选参数、限制取值、多值参数等方式,我们可以轻松构建功能强大的命令行工具。
练习与思考:
- 编写一个命令行工具,支持对文本文件进行大小写转换。
- 使用
argparse实现一个图片批量缩放工具,支持指定输入目录、输出目录和缩放比例。 - 在文件处理脚本中,增加
--log参数,控制是否将日志写入文件。
正文完