add_argument() 的使用方法

本文介绍Python内置的argparse模块,用于解析命令行参数,并通过示例演示如何定义和使用参数。包括设置布尔型参数、整型参数等。
部署运行你感兴趣的模型镜像

背景:在复现文章的时候出现这种代码段。

# Training settings
parser = argparse.ArgumentParser()
parser.add_argument('--no-cuda', action='store_true', default=False, help='Disables CUDA training.')
parser.add_argument('--fastmode', action='store_true', default=False, help='Validate during training pass.')
parser.add_argument('--sparse', action='store_true', default=False, help='GAT with sparse version or not.')
parser.add_argument('--seed', type=int, default=72, help='Random seed.')
parser.add_argument('--epochs', type=int, default=10000, help='Number of epochs to train.')
parser.add_argument('--lr', type=float, default=0.005, help='Initial learning rate.')
parser.add_argument('--weight_decay', type=float, default=5e-4, help='Weight decay (L2 loss on parameters).')
parser.add_argument('--hidden', type=int, default=8, help='Number of hidden units.')
parser.add_argument('--nb_heads', type=int, default=8, help='Number of head attentions.')
parser.add_argument('--dropout', type=float, default=0.6, help='Dropout rate (1 - keep probability).')
parser.add_argument('--alpha', type=float, default=0.2, help='Alpha for the leaky_relu.')
parser.add_argument('--patience', type=int, default=100, help='Patience')

args = parser.parse_args()

介绍:

argparse

argparse 是 Python 内置的一个用于命令项选项与参数解析的模块,通过在程序中定义好我们需要的参数,argparse 将会从 sys.argv 中解析出这些参数,并自动生成帮助和使用信息。当然,Python 也有第三方的库可用于命令行解析,而且功能也更加强大,比如 docoptClick

argparse 使用

简单示例

我们先来看一个简单示例。主要有三个步骤:

  • 创建 ArgumentParser() 对象
  • 调用 add_argument() 方法添加参数
  • 使用 parse_args() 解析添加的参数

 现在我们来简单的测试一下:

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('--sparse', action='store_true', default=False, help='GAT with sparse version or not.')
parser.add_argument('--seed', type=int, default=72, help='Random seed.')
parser.add_argument('--epochs', type=int, default=10000, help='Number of epochs to train.')

args = parser.parse_args()

print(args.sparse)
print(args.seed)
print(args.epochs)


 打印出来的内容为:

/home/user/anaconda3/bin/python3.6 /home/user/lly/pyGAT-master/test.py
False
72
10000

Process finished with exit code 0

先奉上add_argument() 方法定义如何解析命令行参数: 

1
ArgumentParser.add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])

每个参数解释如下:

  • name or flags - 选项字符串的名字或者列表,例如 foo 或者 -f, --foo。
  • action - 命令行遇到参数时的动作,默认值是 store。
    • store_const,表示赋值为const;
    • append,将遇到的值存储成列表,也就是如果参数重复则会保存多个值;
    • append_const,将参数规范中定义的一个值保存到一个列表;
    • count,存储遇到的次数;此外,也可以继承 argparse.Action 自定义参数解析;
  • nargs - 应该读取的命令行参数个数,可以是具体的数字,或者是?号,当不指定值时对于 Positional argument 使用 default,对于 Optional argument 使用 const;或者是 * 号,表示 0 或多个参数;或者是 + 号表示 1 或多个参数。
  • const - action 和 nargs 所需要的常量值。
  • default - 不指定参数时的默认值。
  • type - 命令行参数应该被转换成的类型。
  • choices - 参数可允许的值的一个容器。
  • required - 可选参数是否可以省略 (仅针对可选参数)。
  • help - 参数的帮助信息,当指定为 argparse.SUPPRESS 时表示不显示该参数的帮助信息.
  • metavar - 在 usage 说明中的参数名称,对于必选参数默认就是参数名称,对于可选参数默认是全大写的参数名称.
  • dest - 解析后的参数名称,默认情况下,对于可选参数选取最长的名称,中划线转换为下划线.

 然后对应程序中的内容:action - 命令行遇到参数时的动作,默认值是 store。所以sparse返回的是 Ture,

以下同理:args.seed返回的是72,数据类型是int

                 args.epochs返回的是10000,数据类型是int

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

<think> 我们正在分析一个Python脚本,其中包含一个名为`add_argument_build_vendor`的函数。根据上下文,这个函数用于向命令行参数解析器添加一个子命令(subcommand),这个子命令可能是用于构建vendor相关的操作。 在之前的代码片段中,我们看到主函数中创建了一个主解析器(`main_parser`),然后创建了一个子命令解析器(`subparsers`)。接着,通过调用一系列类似`add_argument_build_system`、`add_argument_build_product`、`add_argument_build_vendor`等函数,向子命令解析器中添加不同的子命令。 因此,我们可以推断`add_argument_build_vendor`函数的作用是创建一个子命令(比如叫做`build_vendor`)并为其添加特定的参数。 下面是一个典型的`add_argument_build_vendor`函数的可能实现: ```python def add_argument_build_vendor(subparsers): # 创建子命令解析器,命令名可能是"build_vendor" parser_build_vendor = subparsers.add_parser('build_vendor', help='Build vendor image') # 添加该子命令所需的参数 parser_build_vendor.add_argument('-o', '--output', required=True, help='Output directory') parser_build_vendor.add_argument('-c', '--config', help='Configuration file') # ... 可能还有其他参数 ``` 在这个函数中: 1. 使用`subparsers.add_parser`创建了一个新的子命令解析器,命令名为`build_vendor`,并提供了帮助信息。 2. 然后,使用这个子命令解析器的`add_argument`方法添加该子命令特有的参数,比如`--output`(简写`-o`)和`--config`(简写`-c`)等。 这样,当用户在命令行中输入主程序名后跟`build_vendor`子命令时,就会触发这个子命令的解析,并且可以接收相应的参数。 由于没有给出具体的函数实现,以上是一个通用的解释。如果实际函数内容不同,但其核心目的是为构建vendor镜像添加一个子命令及其参数。 参考引用中并没有直接提到这个函数,但根据我们对命令行解析器的理解,这个解释是合理的。 因此,我们可以这样总结: ### `add_argument_build_vendor`函数的作用 该函数用于向命令行解析器添加一个名为`build_vendor`的子命令,并为该子命令定义一组特定的参数,以便在构建vendor镜像时使用。 ### 示例代码结构 ```python def add_argument_build_vendor(subparsers): """ 添加构建vendor镜像的子命令及参数 """ # 创建子命令解析器 parser = subparsers.add_parser('build_vendor', help='构建vendor镜像') # 添加参数 parser.add_argument('--vendor_dir', required=True, help='vendor目录路径') parser.add_argument('--target_device', help='目标设备名称') # ... 其他参数 ``` ### 参数说明 - `subparsers`: 主解析器的子命令解析器对象,通过调用其`add_parser`方法可以添加子命令。 - 在函数内部,通过创建的`parser`对象添加该子命令所需的参数。 这样,当程序运行时,用户可以通过以下方式使用该子命令: ```bash python program.py build_vendor --vendor_dir path/to/vendor --target_device device_name ``` ### 注意事项 1. 函数名中的`build_vendor`通常对应于子命令的名称,但实际函数实现中可能有不同的命名。 2. 具体参数需要根据实际构建vendor镜像的需求来设定。 这个函数是构建命令行工具时模块化设计的一部分,每个子命令的添加都被封装在独立的函数中,便于维护和扩展[^1]。 §§相关问题§§ 1. 如何理解Python中argparse模块的子命令机制? 2. 在命令行工具中,如何组织多个子命令的代码结构? 3. 构建vendor镜像通常需要哪些参数? </think>### `add_argument_build_vendor` 函数详解 在 Python 的 argparse 模块中,`add_argument_build_vendor` 函数用于向命令行解析器添加一个名为 `build_vendor` 的子命令及其相关参数。以下是详细的解释: #### 1. 函数目的 - **主要功能**:为构建 vendor 镜像创建一个专门的子命令 - **典型场景**:在 Android 系统构建工具中,用于处理设备厂商特定的构建流程 - **作用位置**:作为 `subparsers.add_parser()` 的参数,扩展命令行功能 #### 2. 典型实现结构 ```python def add_argument_build_vendor(subparsers): # 创建子命令解析器 parser = subparsers.add_parser( 'build_vendor', help='Build vendor-specific components' ) # 添加参数 parser.add_argument( '-d', '--device', required=True, help='Target device name (e.g. "pixel6")' ) parser.add_argument( '-c', '--config', default='vendor_config.xml', help='Vendor configuration file' ) parser.add_argument( '--debug', action='store_true', help='Enable debug mode with verbose output' ) parser.add_argument( 'output_dir', help='Output directory for vendor images' ) # 设置子命令对应的处理函数 parser.set_defaults(func=build_vendor_handler) ``` #### 3. 关键组件解析 | 组件 | 类型 | 说明 | 示例 | |------|------|------|------| | `subparsers.add_parser()` | 方法 | 创建子命令解析器 | `build_vendor` 成为独立命令 | | `required=True` | 参数 | 标记必要参数 | 设备名称必须提供 | | `action='store_true'` | 参数 | 布尔标志参数 | `--debug` 开关 | | `default='...'` | 参数 | 设置默认值 | 默认配置文件 | | `parser.set_defaults()` | 方法 | 绑定处理函数 | 执行实际构建逻辑 | #### 4. 函数调用上下文 在您的原始代码中: ```python subparsers = main_parser.add_subparsers(help="description") add_argument_build_vendor(subparsers) # 添加build_vendor子命令 ``` - `subparsers` 是主解析器创建的子命令容器 - 函数调用将 `build_vendor` 注册为可用命令 #### 5. 使用示例 ```bash # 完整命令示例 python build_tool.py build_vendor \ -d pixel6 \ -c custom_config.xml \ --debug \ out/vendor_images # 参数说明: # build_vendor: 子命令名称 # -d: 目标设备 # -c: 配置文件(可选,有默认值) # --debug: 调试模式开关 # out/vendor_images: 必填的输出目录 ``` #### 6. 实际应用场景 1. **Android 系统构建**: ```python # 在Android构建系统中处理vendor分区 def build_vendor_handler(args): print(f"Building vendor for {args.device}") if args.debug: print("Debug mode enabled") ``` 2. **嵌入式开发**: ```python # 处理芯片厂商的专用固件 parser.add_argument('--soc', choices=['qcom', 'mtk', 'exynos']) ``` 3. **云平台集成**: ```python # 添加云服务商认证参数 parser.add_argument('--aws-profile', help='AWS credential profile') ``` #### 7. 设计要点 - **参数分组**:使用 `add_argument_group()` 组织相关参数 - **互斥参数**:通过 `add_mutually_exclusive_group()` 处理冲突选项 - **参数验证**:使用 `type` 参数进行输入验证: ```python parser.add_argument('--threads', type=int, choices=range(1, 9)) ``` 这种模块化设计允许每个构建阶段(vendor/system/product等)有独立的参数集,保持代码可维护性[^1]。
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值