2. 解析命令行参数并支持选项
任务说明
编写一个命令行参数解析程序,支持短选项 -a 与长选项 --all,并处理带值的选项(如 -o value 或 --output value)。程序需能区分选项与位置参数,并在遇到未知选项时给出错误提示。
实现方案
使用 Python 标准库 argparse 实现参数解析。该库原生支持短选项、长选项、选项值及自动生成帮助信息,无需额外依赖。程序定义三个参数:-a/--all(布尔开关)、-o/--output(带值选项)、files(位置参数,可多个)。解析后打印各参数值,便于验证。
代码实现
import argparse
def parse_args():
parser = argparse.ArgumentParser(
description="命令行参数解析示例:支持短选项、长选项与选项值"
)
# 短选项 -a 与长选项 --all,布尔开关,store_true 表示出现即为 True
parser.add_argument("-a", "--all", action="store_true",
help="显示所有文件(含隐藏文件)")
# 带值选项 -o 与 --output,需要传入一个参数值
parser.add_argument("-o", "--output", metavar="PATH",
help="指定输出文件路径")
# 位置参数,可接收零个或多个文件名
parser.add_argument("files", nargs="*", help="要处理的文件名")
return parser.parse_args()
def main():
args = parse_args()
print(f"all 选项: {args.all}")
print(f"output 选项值: {args.output}")
print(f"位置参数: {args.files}")
if __name__ == "__main__":
main()
运行与验证
将上述代码保存为 cli_parser.py,在终端执行以下命令验证不同场景:
# 场景1:仅使用短选项 -a
python cli_parser.py -a file1.txt
# 场景2:使用长选项 --all 与 --output 带值
python cli_parser.py --all --output result.txt file1.txt file2.txt
# 场景3:混合使用短选项与位置参数
python cli_parser.py -o out.log data.csv
# 场景4:查看自动生成的帮助信息
python cli_parser.py --help
判定标准:
- 场景1输出中
all 选项: True,位置参数为['file1.txt']; - 场景2输出中
all 选项: True,output 选项值: result.txt,位置参数为['file1.txt', 'file2.txt']; - 场景3输出中
all 选项: False,output 选项值: out.log,位置参数为['data.csv']; - 场景4显示包含
-a/--all、-o/--output及files的用法说明; - 若输入未知选项(如
python cli_parser.py -x),程序报错并提示unrecognized arguments,退出码非0。
关键说明
action="store_true"使-a/--all成为布尔开关,出现即为True,不接收额外值;-o/--output通过metavar="PATH"提示用户需要传入路径值;nargs="*"允许位置参数files接收零个或多个文件名;- 若用户输入未知选项,argparse 自动报错并退出,无需手动处理。