Python自定义命令行参数 --> argparse.ArgumentParser() 命令行选项、参数和子命令解析器

Python自定义命令行参数

使用到的方法为 argparse.ArgumentParser() ,此模块有中文文档,建议链接 到官方中文文档中查看。

argparse.ArgumentParser()

此模块可以让人轻松编写用户友好的命令行接口。程序定义它需要的参数,然后 argparse 将弄清如何从 sys.argv 解析出那些参数。 argparse 模块还会自动生成帮助和使用手册「常见的-h」,并在用户给程序传入无效参数时报出错误信息。

使用流程

1、创建一个解析器:

第一步:创建一个 ArgumentParser 对象:

parser = argparse.ArgumentParser(description='Process some integers.')

ArgumentParser 对象包含将命令行解析成 Python 数据类型所需的全部信息。
备注:想知道具体信息可点击类,查看其中的源码

2、添加参数:

ArgumentParser 对象添加参数的方法为:add_argument()

parser.add_argument('integers', metavar='N', type=int, nargs='+',
                    help='an integer for the accumulator')
parser.add_argument('--sum', dest='accumulate', action='store_const',
                    const=sum, default=max,
                  	help='sum the integers (default: find the max)')     

调用 parse_args() 将返回一个具有integers和 accumulate 属性的对象,integers 属性将是一个包含一个或多个整数的列表。而accumulate属性,当传递的参数为–sum时,则是求和「sum() 函数」,当不传参时,默认求最大值「max()函数」

3、解析参数:

ArgumentParser 对象通过 parse_args() 方法解析参数,它将检查命令行,把每个参数转换为适当的类型然后调用相应的操作。
parser.parse_args([’–sum’, ‘7’, ‘-1’, ‘42’])
返回为:Namespace(accumulate=, integers=[7, -1, 42])

上面是官网的例子,其实简而言之就四个步骤:

1、导入模块

import argparse

2、创建对象

 parser = argparse.ArgumentParser(description='描述',  usage = "传参提示")

3、添加对象属性

parser.add_argument()

4、解析参数

parser.parse_args()   或者  parser.parse_known_args() 
下面的内容会讲到这两者的区别

至于具体的参数怎么使用,建议参考官网,本人还未参透所有参数,(。・_・。)ノI’m sorry~,不过已够工作使用,待日后慢慢补充。

工作中的使用:

先上代码,下面有具体的代码解析,研究透这些,就够日常基本使用了

import argparse

parser = argparse.ArgumentParser()


def arg_parser():
    parser = argparse.ArgumentParser(
        usage="usage: %(prog)s [参数名] [参数值]"
    )
    parser.add_argument(
        "--welcome", help="是否展示欢迎词", action='store_true'
    )
    parser.add_argument(
        "--login", help="是否登录", action='store_true', default=True
    )
    parser.add_argument(
        "--login_token", help="登录参数", default=None, type=str
    )

    model_name = parser.add_argument_group("Model", "使用什么模型处理数据?")
    model_name.add_argument(
        "--knn", help="使用KNN方法",
        type=str, default=None
    )
    model_name.add_argument(
        "--tree", help="使用决策树方法",
        type=str, default=None
    )
    return parser


def argument_parser() -> argparse.ArgumentParser:
    """
    Construct an return an `argparse.ArgumentParser` instance
    """
    return arg_parser()


if __name__ == '__main__':
    parser = argument_parser()
    options, argv_rest = parser.parse_known_args()
    if options.knn is not None:
        argv_rest = ["-knn", options.knn] + argv_rest

    if options.login_token is not None:
        print('login_token参数为:', options.login_token)

    options = options
    arguments = argv_rest
    print('options为:', options, '\n', "arguments为:", arguments)

第7行:定义parser,参数中的usage是介绍使用参数的格式,用于用户在运行 -h 时展示提示信息。如下图所示:
在这里插入图片描述
第10、14行:给parser添加属性,重点介绍 action 这个参数

相同点:

  第10行和第14行均是action = ‘store_true’,此参数用于布尔类型的参数  

区别:

  第10行中,当命令行中触发welcome参数时,返回为True,没有触发的时候返回False。
  第14行中,当命令行中触发login参数时,返回为True,没有触发的时候取默认值返回仍为True。也就是说,传不传login参数,返回的都是True,这就是default参数的作用。

action其他参数请参考: https://blog.csdn.net/tsinghuahui/article/details/89279152

第16行

新增login_token参数,传入登录参数token,限制token类型为str,默认为None

提醒一句,这个type不要和action结合使用,action返回的只有布尔类型,注意参数名字大小写是不同的。

第20行:
       add_argument_group(title=None, description=None)方法:
官方解释:

      add_argument_group() 方法返回一个具有 add_argument() 方法的参数分组对象,这与常规的ArgumentParser一样。当一个参数被加入分组时,解析器会将它视为一个正常的参数,但是会在不同的帮助消息分组中显示该参数。
add_argument_group()方法接受 title 和 description 参数,它们可被用来定制显示内容

是不是有点迷糊, 其实就是自定义一个参数分组,如下图所示:
在这里插入图片描述

第41行
      parser.parse_known_args() 和 parser.parse_args() 的区别
            options用来接收命令行中已定义了参数的信息
            argv_rest 接收在命令中未被定义的信息

作用:有时一个脚本可能只解析部分命令行参数,而将其余的参数继续传递给另一个脚本或程序,它的作用方式很类似 parse_args() 但区别在于当存在额外参数时它不会产生错误,额外的参数被argv_rest给接收了。

使用:好比在PyQt中,像定义style这种,就可将参数赋给argv_rest,然后让系统「QApplication」去处理此参数

第42行

假如当命令行中的参数中有knn这个参数,而这个参数我想交给系统去处理,所以我就把它添加到argv_rest之中,将这种参数,统一交给系统处理

第45行

传入的参数中存在login_token,对login_token进行单独处理。

以上,是我的粗略了解,有问题的大家评论区留言,知无不言,言无不尽。感觉不错的话,别忘了点赞收藏哦!
在这里插入图片描述

  • 10
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
命令行参数是在命令行中输入的选项参数,用于控制程序的行为。在使用命令行运行Python脚本时,可以通过命令行参数来传递额外的信息给程序。 例如,下面是一个运行 Python 脚本时使用了命令行参数的示例命令: ``` python script.py --model_name TextCNN --dataset dataset1 --classes_level2 29 --classes_level3 0 --classify_type level2_multi --fine_tune ``` 在上面的命令中,`--model_name`、`--dataset`、`--classes_level2`等是命令行选项,用于指定参数的名称。而`TextCNN`、`dataset1`、`29`、`0`、`level2_multi`等是相应选项的值。 使用 `argparse.ArgumentParser` 类可以定义这些命令行选项参数。可以通过调用 `add_argument()` 方法来添加选项参数的定义。例如, `parser.add_argument('--model_name', type=str, default=model_name, help='[TextCNN、TextRCNN、TextRNN、TextRNN_Att、DPCNN、FastText]')` 定义了一个名为 `--model_name` 的选项,它表示模型名称,并且它的类型为字符串 (`type=str`),默认值为 `model_name` 变量的值,同时还提供了帮助信息。 使用 `argparse.ArgumentParser()` 创建的解析器对象可以解析命令行参数,并将其转换为程序中的变量。通过调用 `parse_args()` 方法,可以解析并返回一个命名空间对象,其中包含了命令行参数的值。可以通过访问这个对象的属性来获取相应参数的值。 总之,`argparse.ArgumentParser` 类用于定义和解析命令行参数,而命令行参数则是在命令行中输入的选项参数,用于控制程序的行为。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值