IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Python自定义命令行参数 --> argparse.ArgumentParser() 命令行选项、参数和子命令解析器 -> 正文阅读

[Python知识库]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进行单独处理。

以上,是我的粗略了解,有问题的大家评论区留言,知无不言,言无不尽。

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-12-28 22:52:51  更:2021-12-28 22:54:11 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 3:21:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码