尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

Python命令行参数解析argparse实战:从入门到精通

Python命令行参数解析argparse实战:从入门到精通
📅 发布时间:2026/6/30 1:34:51

argparse 基础入门

1.1 最简单的示例

让我们从一个最简单的例子开始:

1

importargparse<br><br># 创建解析器<br>parser = argparse.ArgumentParser(description='这是一个示例程序')<br><br># 添加位置参数<br>parser.add_argument('name', help='你的名字')<br><br># 解析参数<br>args = parser.parse_args()<br><br>print(f'你好,{args.name}!')

运行效果:

1

$ python hello.py Alice<br>你好,Alice!

1.2 核心概念

  • ArgumentParser:参数解析器,所有参数的容器
  • add_argument():添加参数的方法
  • parse_args():解析命令行输入,返回命名空间对象

二、参数类型详解

2.1 位置参数与可选参数

1

importargparse<br><br>parser=argparse.ArgumentParser()<br><br># 位置参数(必须提供)<br>parser.add_argument('filename', help='要处理的文件名')<br><br># 可选参数(以 - 或 -- 开头)<br>parser.add_argument('-v', '--verbose', action='store_true', help='启用详细输出')<br>parser.add_argument('-n', '--number', type=int, default=1, help='重复次数')<br><br>args = parser.parse_args()<br>print(f'处理文件: {args.filename}')<br>print(f'详细模式: {args.verbose}')<br>print(f'重复次数: {args.number}')

2.2 参数类型转换

argparse支持自动类型转换:

1

parser.add_argument('--port',type=int, default=8080,help='端口号')<br>parser.add_argument('--rate',type=float, default=1.0,help='比率')<br>parser.add_argument('--tags', nargs='+',help='标签列表')# 接收多个值

三、高级用法

3.1 互斥参数组

有时你需要让某些参数互斥(不能同时使用):

1

parser=argparse.ArgumentParser(description='文件处理工具')<br>group=parser.add_mutually_exclusive_group()<br>group.add_argument('--json', action='store_true',help='以JSON格式输出')<br>group.add_argument('--csv', action='store_true',help='以CSV格式输出')<br>group.add_argument('--xml', action='store_true',help='以XML格式输出')

3.2 子命令(Sub-Commands)

像 Git 那样的子命令实现:

1

parser=argparse.ArgumentParser(description='项目管理工具')<br>subparsers=parser.add_subparsers(dest='command',help='可用命令')<br><br># 创建 init 子命令<br>init_parser = subparsers.add_parser('init', help='初始化项目')<br>init_parser.add_argument('--template', default='basic', help='项目模板')<br><br># 创建 build 子命令<br>build_parser = subparsers.add_parser('build', help='构建项目')<br>build_parser.add_argument('--release', action='store_true', help='发布模式')<br><br>args = parser.parse_args()<br><br>if args.command == 'init':<br> print(f'初始化项目,使用模板: {args.template}')<br>elif args.command == 'build':<br> print(f'构建项目,发布模式: {args.release}')

3.3 自定义动作(Action)

1

classCustomAction(argparse.Action):<br>def__call__(self, parser, namespace, values, option_string=None):<br>print(f'自定义处理: {values}')<br>setattr(namespace,self.dest, values.upper())<br><br>parser.add_argument('--name', action=CustomAction,help='名称(自动转为大写)')

四、实用技巧

4.1 参数验证

1

defcheck_port(value):<br> ivalue=int(value)<br>ifnot(1<=ivalue <=65535):<br>raiseargparse.ArgumentTypeError(f"{value} 不是有效的端口号")<br>returnivalue<br><br>parser.add_argument('--port',type=check_port, default=8080)

4.2 从文件读取参数

1

parser.add_argument('--config',type=argparse.FileType('r'),help='配置文件')<br><br># 或使用 fromfile_prefix_chars<br>parser = argparse.ArgumentParser(fromfile_prefix_chars='@')<br># 然后可以: python script.py @args.txt

4.3 美化帮助信息

1

parser=argparse.ArgumentParser(<br> prog='mytool',<br> usage='%(prog)s [options] filename',<br> description='%(prog)s 是一个强大的文件处理工具',<br> epilog='示例: mytool data.txt --verbose --output result.txt',<br> formatter_class=argparse.RawDescriptionHelpFormatter<br>)

五、完整实战示例

下面是一个完整的日志分析工具:

1

#!/usr/bin/env python3<br># log_analyzer.py - 日志分析工具<br><br>import argparse<br>import re<br>from collections import Counter<br><br>def analyze_log(filename, pattern=None, top_n=10, output=None):<br> """分析日志文件"""<br> with open(filename, 'r', encoding='utf-8') as f:<br> lines = f.readlines()<br> <br> # 过滤匹配的行<br> if pattern:<br> regex = re.compile(pattern)<br> lines = [line for line in lines if regex.search(line)]<br> <br> # 统计IP地址<br> ip_pattern = re.compile(r'\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b')<br> ips = []<br> for line in lines:<br> ips.extend(ip_pattern.findall(line))<br> <br> ip_counts = Counter(ips).most_common(top_n)<br> <br> # 输出结果<br> result = f"\n分析结果 ({len(lines)} 行匹配):\n"<br> result += "="*40 + "\n"<br> result += "Top {} IP 地址:\n".format(top_n)<br> for ip, count in ip_counts:<br> result += f" {ip}: {count} 次\n"<br> <br> if output:<br> with open(output, 'w') as f:<br> f.write(result)<br> print(f"结果已保存到: {output}")<br> else:<br> print(result)<br><br>def main():<br> parser = argparse.ArgumentParser(<br> prog='log_analyzer',<br> description='Web日志分析工具 - 统计访问IP和请求',<br> epilog='示例: log_analyzer access.log --pattern "404" --top 5'<br> )<br> <br> parser.add_argument('logfile', help='日志文件路径')<br> parser.add_argument('-p', '--pattern', help='过滤正则表达式')<br> parser.add_argument('-t', '--top', type=int, default=10, help='显示前N个IP (默认: 10)')<br> parser.add_argument('-o', '--output', help='输出结果到文件')<br> parser.add_argument('-v', '--verbose', action='store_true', help='详细模式')<br> <br> args = parser.parse_args()<br> <br> if args.verbose:<br> print(f"开始分析: {args.logfile}")<br> <br> analyze_log(args.logfile, args.pattern, args.top, args.output)<br><br>if __name__ == '__main__':<br> main()

六、argparse vs 其他选择

相关新闻

  • 没策略的画册,再好看也白做_长沙画册设计
  • 真的领到了8元,30s教会你
  • android compose Glide 加载图片 使用

最新新闻

  • InteractiveHtmlBom-AD:让 Altium Designer 直接导出交互式 HTML BOM
  • 【UWP】使用 Vue/Vite 编写 WinJS/UWP
  • 在程序员圈子里,Rust常常以学习路线陡峭而闻名。就我自己的个人理解来说,之所以说它“学习路线陡峭”,很大程度上都来源于以下三点:
  • 返回主页Do or Not Do, Must Keep Trying To Know The Result !尝试远比想象好 - - - - 弥烟袅绕
  • 嵌入式软件开发回归
  • 如何在数据分析中应用时间序列分析?有哪些常用的时间序列模型?

日新闻

  • 【计算机毕业设计案例】基于 Spring Boot+Vue 的电影售票系统设计与实现 前后端分离架构下影院在线购票管理平台(程序+文档+讲解+定制)
  • 到底 TMD 用哪个: npm, pnpm, Yarn, Bun, Deno? 傻瓜, 当然用 npm 啦
  • Google限制Meta使用Gemini模型 凸显AI授权竞争白热化

周新闻

  • Windows字体自定义终极方案:No!! MeiryoUI完全指南
  • Deepin Boot Maker:告别命令行,3分钟制作Linux启动盘的智能解决方案
  • Plain Craft Launcher 2:重新定义你的Minecraft游戏体验

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号