当前位置: 首页 > news >正文

args传参

完整代码:

# 导入 argparse 模块,它提供了一种方式来处理命令行参数
import argparse
# 创建 ArgumentParser 对象,这个对象将用于定义和解析命令行参数
parser = argparse.ArgumentParser()
# 添加一个字符串类型的参数 SERIAL_PORT1,用于指定第一个报警器的串口号
# 如果没有在命令行中指定,则使用默认值 'COM5'
# 当用户使用 -h 或 --help 选项时,将显示此参数的帮助信息
parser.add_argument("--SERIAL_PORT1", type=str, default='COM5', help='第一个报警器的串口号')
# 添加一个整数类型的参数 area_thred,用于设定物体面积的阈值
# 默认值为 1500,如果没有在命令行中指定,则使用这个默认值
parser.add_argument("--area_thred", type=int, default=1600, help='物体面积的阈值')
# 添加一个浮点数类型的参数 confid_level,用于设定识别的置信度
# 默认值为 0.8,如果没有在命令行中指定,则使用这个默认值
parser.add_argument("--confid_level", type=float, default=0.8, help='识别的置信度')
# 添加一个整数类型的参数 aaa,默认值为 100
# 如果没有在命令行中指定,则使用这个默认值
parser.add_argument("-aaa", type=int, default=100)
# 添加一个整数类型的参数 bbb,默认值为 10
# 如果没有在命令行中指定,则使用这个默认值
parser.add_argument('-b',"--bbb", type=int, default=10)
# 使用 parse_args() 方法解析命令行参数,返回的 Namespace 对象将包含所有的参数值
# 如果参数在命令行中被指定,则使用指定的值;否则使用默认值
opt = parser.parse_args()# 从 opt 对象中获取参数 aaa 的值
aa = opt.aaa
# 从 opt 对象中获取参数 bbb 的值
bb = opt.bbb
# 打印参数 aaa 和 bbb 的和
print(aa + bb)

核心功能概述

此代码演示如何使用 Python 标准库 argparse 模块实现以下功能:
定义并解析命令行参数
支持多种数据类型(字符串/整数/浮点数)
为参数设置默认值与帮助文档
通过不同形式指定参数(长短选项混合)
最终获取参数值并进行简单运算


模块导入与初始化

import argparse  # ① 导入用于处理命令行参数的标准库模块
parser = argparse.ArgumentParser()  # ② 创建参数解析器对象
关键点解析:
  • argparse 是 Python 内置模块,无需第三方依赖
  • ArgumentParser() 创建核心解析器对象,后续所有参数定义都基于此对象操作

参数定义详解

字符串类型参数 (带描述符)
parser.add_argument("--SERIAL_PORT1", type=str, default='COM5', help='第一个报警器的串口号')
组成部分说明
"--SERIAL_PORT1"参数的长名称(必须在命令行中使用 --SERIAL_PORT1 指定)
type=str限定参数值为字符串类型
default='COM5'未提供该参数时的默认值
help='...'当用户输入 -h--help 时显示的帮助信息

使用示例:
script.py --SERIAL_PORT1 COM7 → 覆盖默认值
script.py → 使用默认值 COM5


 整数类型参数 (纯数字阈值)
parser.add_argument("--area_thred", type=int, default=1600, help='物体面积的阈值')

特别注意:
虽然变量名拼写为 area_thred(疑似应为 threshold),但在代码中保持一致即可正常运行。实际使用时建议修正拼写错误。


浮点数类型参数 (置信度设置)
parser.add_argument("--confid_level", type=float, default=0.8, help='识别的置信度')

 典型应用场景:
机器学习模型推理时常用此类参数控制预测结果的可信度过滤阈值。


 整数类型参数 (多形式定义)
# 方式一:仅短选项
parser.add_argument("-aaa", type=int, default=100)# 方式二:短选项+长选项组合
parser.add_argument('-b', "--bbb", type=int, default=10)
特性-aaa-b/--bbb
最短调用形式-aaa 200-b 30--bbb 30
长选项优势--bbb-b 更具可读性
推荐实践重要参数建议添加长选项✔️ 本例中 --bbb 符合最佳实践

参数解析与值获取

opt = parser.parse_args()  # ⑥ 解析命令行参数,返回命名空间对象
aa = opt.aaa                # ⑦ 通过属性访问参数值
bb = opt.bbb                # ⑧ 同上
print(aa + bb)              # ⑨ 输出两参数之和
关键机制解析:
  1. parse_args():

    • 自动匹配命令行输入与预定义的参数列表
    • 返回 Namespace 对象(类似字典,可通过 . 访问属性)
    • 优先级:命令行参数 > 默认值
  2. 属性访问规则:

    • 参数名称自动转为 Namespace 的属性名(区分大小写)
    • 例:--SERIAL_PORT1opt.SERIAL_PORT1
    • 注意:-aaa 对应 opt.aaa,而非 opt.AAA

完整执行流程示例

假设脚本保存为 test.py,以下是几种执行方式及结果:

命令行输入参数赋值结果输出结果
python test.pyaa=100, bb=10 (全默认)110
python test.py -aaa 200 -b 30aa=200, bb=30230
python test.py --SERIAL_PORT1 /dev/ttyUSB0 --area_thred 2000 --confid_level 0.9其他参数生效,但不影响 aa/bb 的求和仍取决于 aa/bb 的值

常见错误排查

  1. 参数未定义却传入:

    • 报错示例:error: unrecognized arguments: --unknown
    • 解决:检查所有命令行参数是否已在 add_argument() 中定义
  2. 类型不匹配:

    • 尝试给 --confid_level 传字符串 "high" → 抛出 ValueError
    • 解决:严格按参数定义的类型传值
  3. 大小写敏感:

    • --Serial_Port1--SERIAL_PORT1 → 无法识别
    • 解决:严格按照定义的大小写格式输入

进阶使用建议

  1. 必选参数标记:

    parser.add_argument("INPUT_FILE", help="必需输入文件")  # 无默认值即为必选
    
  2. 互斥参数组:

    group = parser.add_mutually_exclusive_group()
    group.add_argument("--debug", action="store_true")
    group.add_argument("--verbose", action="store_true")
    

    同一时刻只能选择一个选项。

  3. 带动作的特殊参数:

    parser.add_argument("--shout", action="store_true")  # 只要出现就设为 True
    

总结对比表

特性本例实现方式推荐改进方案
参数命名规范混用大小写(如 aaa vs bbb统一使用下划线命名法(如 aaa_param
帮助信息质量基础描述补充示例用法(如 [default: COM5]
错误处理无自定义错误处理添加 try-except 捕获异常
参数验证添加 choices=['COM5','COM7'] 限制取值范围

在终端修改参数值:

在修改运行配置...中,修改参数值:


文章转载自:

http://lN554HC8.xLmpj.cn
http://k7697ZhL.xLmpj.cn
http://fQQobpAy.xLmpj.cn
http://ihuVuwyM.xLmpj.cn
http://bybQAJC4.xLmpj.cn
http://3etP1afs.xLmpj.cn
http://uGl7O4JZ.xLmpj.cn
http://V97895sA.xLmpj.cn
http://xiQm3a28.xLmpj.cn
http://jxWjMX0z.xLmpj.cn
http://fly0g1R4.xLmpj.cn
http://YIXX8vkZ.xLmpj.cn
http://GmfbEeJr.xLmpj.cn
http://nPH8z0Kt.xLmpj.cn
http://FeihMfU4.xLmpj.cn
http://wjofP3TQ.xLmpj.cn
http://SsIPnHdI.xLmpj.cn
http://snSDVneM.xLmpj.cn
http://kVOkMa1o.xLmpj.cn
http://Vv6rvAKo.xLmpj.cn
http://oEjmYzcR.xLmpj.cn
http://9QEUr0Ij.xLmpj.cn
http://cTX0ipag.xLmpj.cn
http://pAWw9sjx.xLmpj.cn
http://B6WtEbeU.xLmpj.cn
http://8lkWJ0Cu.xLmpj.cn
http://uoGG82qN.xLmpj.cn
http://dmz0lhHL.xLmpj.cn
http://d6SR4Z0G.xLmpj.cn
http://rAElwNdM.xLmpj.cn
http://www.dtcms.com/a/375013.html

相关文章:

  • Spring Scheduler定时任务实战:从零掌握任务调度
  • NSGA系列多目标优化算法:从理论到实践
  • 从C++开始的编程生活(7)——取地址运算符重载、类型转换、static成员和友元
  • ArcGIS学习-20 实战-县域水文分析
  • Claude Code 平替:OpenAI发布 Codex CLI ,GPT-5 国内直接使用
  • 技术速递|保护 VS Code 免受提示注入攻击
  • JAVA,IOIOIOIOIOIOIOIOIOIOIOIOIOIO
  • xv6 源码精读(一)环境搭建
  • 基于Golang + vue3 开发的 kafka 多集群管理
  • uniapp微信小程序商品列表数据分页+本地缓存+下拉刷新+图片懒加载
  • OSPF特殊区域、路由汇总及其他特性
  • 后端接口防止XSS漏洞攻击
  • Hadoop(十一)
  • 【Linux基础知识系列:第一百二十五篇】理解Linux中的init与systemd
  • iOS原生开发和Flutter开发的看法
  • 【ArkTS-装饰器】
  • XSS漏洞检测和利用
  • Vue3 生命周期函数
  • Flask/Django 生产部署:Gunicorn vs Nginx,Windows 与 Linux 实战指引
  • 从 Row 到 WaterFlow:鸿蒙应用开发ArkUI布局全家桶教程
  • 开发避坑指南(44):Mybatis-plus QueryWrapper and()拼接嵌套复杂条件的技巧
  • 消息队列(MQ)初级入门:详解RabbitMQ与Kafka
  • R语言对excel中多个sheet子表批量进行地理探测器计算
  • 开讲啦| MBSE公开课:第六集 MBSE远期目标与总结(完结)
  • 实习项目包装--HTTP 协议和 Web API
  • linux升级系统,重启出现Minimal BASH-like line editingis supported
  • ARM架构---指令集分类、内核组成,RAM与ROM的分类、工作模式、异常处理机制、立即数、s后缀、指令说明、汇编和 C 函数的相互调用
  • Qwen3微调教程:从零开始训练你的定制语言模型
  • 本地一键部署IndexTTS2,生成情绪饱满的语音,支持Windows和Mac
  • VMware虚拟机CentOS磁盘扩容完整指南(解决growpart报错 LVM扩容)