【python 进阶】argparse模块

argparse模块

Python 的 argparse模块用于解析命令行参数,使得脚本能够灵活地接受用户从命令行传入的各种参数,从而根据不同的参数配置来执行不同的操作。

ArgumentParser 类

argparse.ArgumentParser 是 Python 中 argparse 模块的核心类,用于创建一个解析器对象,该对象能够读取和解析命令行参数和选项,将它们转换为相应的数据类型,并提供给程序使用。

功能

常用功能有

功能 描述
解析命令行参数 能够识别命令行中输入的各种参数,包括位置参数(positional arguments)和可选参数(optional arguments),并将它们解析为程序可用的值。
自动生成帮助文档 当用户在命令行中使用 -h--help 选项时,自动显示程序的用法说明和参数描述,方便用户了解程序的参数要求和功能 。
参数类型检查和转换 支持对参数的类型进行检查和转换,如将字符串参数转换为整数、浮点数等指定类型,确保程序接收到的参数类型正确。
默认值设置 可以为参数指定默认值,当用户未提供该参数时,程序会使用默认值,提高了程序的灵活性和易用性。
参数验证 通过自定义的验证函数,可以对参数的值进行进一步的验证,确保参数满足特定的条件和约束。

基本用法

1 创建解析器对象

通过调用 argparse.ArgumentParser() 创建一个解析器对象,可以传入一些可选参数来定制解析器的行为,如 description 用于描述程序的用途,prog 用于指定程序名称等。

parser = argparse.ArgumentParser()

2 添加参数

使用解析器对象的 add_argument 方法添加参数。该方法的常见参数如下:

参数名称 描述
name or flags 参数的名称或选项标志,例如 --foo-f
action 指定当参数出现时应采取的动作,常见的有 store(保存参数值,默认动作)、store_true(保存 True 值,当参数出现时)、store_false(保存 False 值,当参数出现时)、append(将值追加到列表中)等。
nargs 指定参数值的数量,可以是具体数字、'?'(可选参数,可提供 0 或 1 个值)、'*'(零个或多个值)、'+'(一个或多个值)等。
const actionstore_const 时,用于指定保存的常量值。
default 指定参数的默认值。
type 指定参数的类型,如 intfloatstr 等。
choices 指定参数值的可选集合,当参数值不在该集合中时,会报错。
required 指定参数是否为必需的,对于可选参数,默认为 False,对于位置参数,默认为 True
help 提供参数的简短描述,用于生成帮助文档。
dest 指定参数值在解析后的命名空间对象中的属性名,默认为参数名称或标志去掉前导 - 后的名称。

3 解析参数

调用解析器对象的 parse_args 方法解析命令行参数,返回一个命名空间对象,其中包含了所有解析后的参数值。可通过对象的属性名来访问各个参数的值。

args = parser.parse_args()

应用示例

import argparse

# 创建解析器对象
parser = argparse.ArgumentParser(description='一个示例程序')

# 添加参数
parser.add_argument('--foo', type=int, default=42, help='一个整数参数,默认值为42')
parser.add_argument('bar', type=str, help='一个位置参数,表示文件路径')

# 解析参数
args = parser.parse_args()

# 使用参数值
print('foo 的值:', args.foo)
print('bar 的值:', args.bar)

运行python script.py -h

usage: script.py [-h] [--foo FOO] bar

一个示例程序

positional arguments:
  bar         一个位置参数,表示文件路径

optional arguments:
  -h, --help  show this help message and exit
  --foo FOO   一个整数参数,默认值为42

运行python script.py file.txt --foo 100
上面命令意味着args.foo 的值为 100,args.bar 的值为 ‘file.txt’。

部分 含义
python 指定使用 Python 解释器运行脚本。
script.py 要运行的 Python 脚本文件名。
file.txt 位置参数,表示文件路径,存储到 args.bar 中。
--foo 选项参数标志,表示一个整数参数,存储到 args.foo 中。
100 选项参数 --foo 的值,表示该参数的具体数值。

论文代码示例

if __name__ == '__main__':
    #  Python 脚本的入口点,使用 argparse 模块解析命令行参数,然后调用 run 函数执行主要逻辑
    parser = argparse.ArgumentParser()

    # 指定要使用的语言模型
    parser.add_argument('--llm', type=str, default='gpt-3.5')

    # 指定任务类型,例如 'csqa'、'math' 等
    parser.add_argument('--task', type=str)

    # 指定上下文选择的参数,可能用于控制生成答案时的上下文策略
    parser.add_argument('--cot', type=str, help='context selection')

    # 指定运行的样本数量,-1 表示运行所有样本
    parser.add_argument('--num', type=int, default=-1, help='number of running samples, -1 for all samples')

    # 指定防御策略,可能用于对抗攻击
    parser.add_argument('--defense', type=str, default=None)

    # 是否启用攻击模式,即是否向问题中添加触发器
    parser.add_argument('-attack', action='store_true', default=False, help='whether add trigger to test question')

    # 指定触发器的标识符,可能从 triggers.json 文件中加载
    parser.add_argument('--trigger', type=str, default="s01", help='id of trigger for triggers.json')

    # 指定 API ID,可能用于访问语言模型的 API
    parser.add_argument('--api_id', type=int, default='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')

    #  是否仅执行评估,而不运行模型生成
    parser.add_argument('-eval_only', action='store_true', default=False, help='whether only eval the output file')

    # 每个问题的输出数量,默认为 1,大于 1 时用于自洽性(self-consistency)
    parser.add_argument('--sc', type=int, default=1, help='number of output per question, default 1. More than 1 set for self-consistency')

    # 指定用于抽样的索引文件标识符
    parser.add_argument('--index', type=str, default=None, help='subsampling index file identifier to run')

    # 指定从哪个索引恢复执行
    parser.add_argument('--resume', type=int, default=-1, help='resume index')

    # 是否不覆盖已有的输出文件
    parser.add_argument('-not_overwrite', action='store_true', default=False, help='whether not overwrite the existing output file')

    # 是否随机化问题的顺序
    parser.add_argument('-rand', action='store_true', default=False, help='whether randomize the order of questions')

    # 指定触发器在问题中的位置。
    parser.add_argument('--tp', type=str, default=None, help='trigger position for question')

    # 指定评估时的样本数量,-1 表示评估所有样本
    parser.add_argument('--eval_num', type=int, default=-1, help='number of samples for eval, -1 for all samples')
  
  '''
  使用 parse_args 方法解析命令行传入的参数,解析后的参数会存储在 args 对象中,
  后续可以通过 args.参数名 的方式来获取各个参数的值,例如 args.llm 获取模型名参数的值。
  '''
    args = parser.parse_args()
    
'''
在解析完参数后,调用 run 函数,并将解析后的参数对象 args 作为参数传递给该函数,
函数内部会根据这些参数的值来执行相应的逻辑和操作,完成程序的主要功能
'''
    run(args)

你可能感兴趣的:(python,python,java,linux)