Python-argparse命令解析模块详解与代码展示

这篇具有很好参考价值的文章主要介绍了Python-argparse命令解析模块详解与代码展示。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

示例

思路

ArgumentParser

add_argument

位置参数

选项参数

选项对应功能,即选项存在就运行某些代码

一个选项对应多个参数值

选项必须存在

选项存在时,参数值只能在一个范围内选择

参数组

互斥参数组(几个选项最多有一个)

总结

全部代码

参考


在类似sqlmap这种命令行框架,经常敲这样的命令

python xxx.py -u http://example.com -p 80

这是怎么实现的呢?这就用到了argparse模块,本文主要讲解思路,主要将选项参数。

示例

import argparse

parser = argparse.ArgumentParser(description='Process some integers.')
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)')
args = parser.parse_args()
print(args.accumulate(args.integers))

 

Python-argparse命令解析模块详解与代码展示
-h 选项
Python-argparse命令解析模块详解与代码展示
位置及选项参数

思路

如果我们需要自己写一个解析器,需要哪些功能呢?或者说我们有什么需求呢?举几个例子:

通过位置确定参数值

通过选项确定参数值

  1. 选项对应功能,即选项存在就运行某些代码
  2. 没有选项时,设置默认值
  3. 一个选项对应一个参数值
  4. 一个选项对应多个参数值
  5. 选项存在时,参数值只能在一个范围内选择
  6. 某选项必须存在
  7. 几个选项最多有一个(互斥)

以上功能,这个模块都能实现。基本流程如下:

  1. import argparse                                       导入模块
  2. parser = argparse.ArgumentParser() 创建一个解析对象
  3. parser.add_argument()                           添加命令行选项
  4. parser.parse_args()                                进行解析

ArgumentParser

class argparse.ArgumentParser(prog=None, usage=None, description=None, epilog=None, parents=[], formatter_class=argparse.HelpFormatter, prefix_chars='-', fromfile_prefix_chars=None, argument_default=None, conflict_handler='error', add_help=True, allow_abbrev=True)

  •     prog - 程序的名称(默认值:sys.argv[0])
  •     usage - 描述程序用途的字符串(默认值:从添加到解析器的参数生成)
  •     description - 在参数帮助文档之前显示的文本(默认值:无)
  •     epilog - 在参数帮助文档之后显示的文本(默认值:无)
  •     parents - 一个 ArgumentParser 对象的列表,它们的参数也应包含在内
  •     formatter_class - 用于自定义帮助文档输出格式的类
  •     prefix_chars - 可选参数的前缀字符集合(默认值: '-')
  •     fromfile_prefix_chars - 当需要从文件中读取其他参数时,用于标识文件名的前缀字符集合(默认值: None)
  •     argument_default - 参数的全局默认值(默认值: None)
  •     conflict_handler - 解决冲突选项的策略(通常是不必要的)
  •     add_help - 为解析器添加一个 -h/--help 选项(默认值: True)
  •     allow_abbrev - 如果缩写是无歧义的,则允许缩写长选项 (默认值:True)

add_argument

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

  •     name or flags - 一个命名或者一个选项字符串的列表,例如 foo 或 -f, --foo。
  •     action - 当参数在命令行中出现时使用的动作基本类型。
  1. store:存储参数的值。这是默认的动作
  2. store_const:存储被const命名参数指定的值。
  3. store_true和store_false :这些是 'store_const' 分别用作存储 TrueFalse 值的特殊用例。
  4. append:存储一个列表,并且将每个参数值追加到列表中。使用与一个选项多次出现的情况。
  5. append_const:这存储一个列表,并将const命名参数指定的值追加到列表中。
  6. count:计算一个关键字参数出现的数目或次数。
  •     nargs - 命令行参数应当消耗的数目。
  1. N:N个参数形成一个列表
  2. ?:从命令行中消耗一个参数,并产生一个单一项。如果当前没有命令行参数,则会产生default值
  3. *: 所有当前命令行参数被聚集到一个列表中
  4. +:所有当前命令行参数被聚集到一个列表中。另外,当前没有至少一个命令行参数时会产生一个错误信息
  •     const - 被一些 action 和 nargs 选择所需求的常数。
  •     default - 当参数未在命令行中出现时使用的值。
  •     type - 命令行参数应当被转换成的类型。
  •     choices - 可用的参数的容器。
  •     required - 此命令行选项是否可省略 (仅选项可用)。
  •     help - 一个此选项作用的简单描述。
  •     metavar - 在使用方法消息(-h)中使用的参数值示例。
  •     dest - 被添加到 parse_args() 所返回对象上的属性名。

位置参数

parser.add_argument('integers', metavar='N', type=int, nargs='+',
                    help='an integer for the accumulator')

直接写参数名

metavar:使用-h或--help时,参数值示例

type:字符串转为int

nargs:所有当前命令行参数被聚集到一个列表中

help:--h的时候显示的字符串

Python-argparse命令解析模块详解与代码展示

可以输出args,当然字典形式更加的清晰。位置参数作为args的属性。

选项参数

选项对应功能,即选项存在就运行某些代码

parser.add_argument('--sum', dest='accumulate', action='store_const',
                    const=sum, default=max,
                    help='sum the integers (default: find the max)')

--sum存在,就运行sum函数,没有--sum选项,就运行max函数

使用-参数名或--参数名

dest:属性,这里是函数,const或default指定的函数

action:保存sum函数

const:选项存在时的值,这里是函数sum

default:默认的动作

help:显示的帮助值

一个选项对应多个参数值

parser.add_argument("-per", "--per", dest='permutations', default=[], nargs='+', help="permutations of the integers ("
                                                                                     "default: find the max)")

dest:属性名为permutations

nargs:所有当前命令行参数被聚集到一个列表

default:默认为空列表

help:-h时显示的帮助

Python-argparse命令解析模块详解与代码展示
选项参数对应多个参数值

选项必须存在

parser.add_argument("-min", "--mini", dest='min', default=[], nargs='+', required=True, help="minimum of the integers")

dest:属性名为min

default:默认为空列表

nargs:接收多个值

required:True,必须有这个选项

Python-argparse命令解析模块详解与代码展示

选项存在时,参数值只能在一个范围内选择

Python-argparse命令解析模块详解与代码展示

Python-argparse命令解析模块详解与代码展示

 

参数组

ArgumentParser.add_argument_group(title=None, description=None)

当有比官方更好的位置、选项两个分组时,可以添加新的分组,来更好的分类展示

v_group = parser.add_argument_group("v_group", "about version and verose")
v_group.add_argument("--version", dest="show_version", help="show the version")
v_group.add_argument("-v", dest="verbose", default=1, choices=[1, 2, 3, 4], help="show more information, 1~4")
Python-argparse命令解析模块详解与代码展示
参数组

参数组的使用: 

Python-argparse命令解析模块详解与代码展示
结果

互斥参数组(几个选项最多有一个)

从上面可以看到,一个参数组的参数都可以存在,如果一个参数组只能存在一个呢?这就用到了互斥参数组

ArgumentParser.add_mutually_exclusive_group(required=False)

required为True时,代表至少有一个必须存在

csdn = parser.add_mutually_exclusive_group(required=True)
csdn.add_argument("--like", action='store_true', dest="like", help="love csdn")
csdn.add_argument("--hate", action='store_true', dest="hate", help="hate csdn")
Python-argparse命令解析模块详解与代码展示
互斥作用
Python-argparse命令解析模块详解与代码展示
互斥组一个选项

总结

  • argpase模块,将参数解析成一个字典,dest就是字典的key,你输入的就是Value
  • 多个参数值使用nargs
  • 参数值有范围,使用choices
  • 参数必须存在使用required
  • 多个参数不能同时存在,至少有一个存在可以使用互斥参数组

有其他的功能,我们可以自己对字典进行扩展和限制,不满足条件时报错。

全部代码

"""
-*- coding:utf-8 -*-
@File: learnarg.py
@Author:frank yu
@DateTime: 2021.04.06 20:45
@Contact: frankyu112058@gmail.com
@Description:
"""
import argparse
from itertools import permutations

parser = argparse.ArgumentParser(description='a demo to learn argparse by lady_killer.')
# ----------------------- 位置参数 -----------------------
parser.add_argument('integers', metavar='N', type=int, nargs='+',
                    help='an integer for the accumulator')

# --------选项参数,一个选项一个值(存在为sum函数,不存在为max函数)----------------
parser.add_argument('--sum', dest='accumulate', action='store_const',
                    const=sum, default=max,
                    help='sum the integers (default: find the max)')

# -------------------- 一个选项多个值,放到列表 ---------------------
parser.add_argument("-per", "--per", dest='permutations', default=[], nargs='+', help="permutations of the integers")

# ------------------ 选项必须存在,required参数 ---------------------
parser.add_argument("-min", "--mini", dest="min", default=[], nargs='+', required=True, help="minimum of the "
                                                                                             "integers,must exist")

# -------------------- 参数在范围内,choices参数 --------------------
parser.add_argument("-num", "--number", dest="num", type=int, default=1, choices=[x for x in range(10)],
                    help="a integer,0<=num<=9")

# -------------------- 参数组 --------------------
v_group = parser.add_argument_group("v_group", "about version and verose")
v_group.add_argument("--version", action='store_true', dest="show_version", help="show the version")
v_group.add_argument("-v", dest="verbose", default=1, type=int, choices=[1, 2, 3, 4], help="show more information, 1~4")

csdn = parser.add_mutually_exclusive_group(required=True)
csdn.add_argument("--like", action='store_true', dest="like", help="love csdn")
csdn.add_argument("--hate", action='store_true', dest="hate", help="hate csdn")

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

# -------------- 解析结果查看 --------------------
# print(dir(args))
print(args.__dict__)

# ------------- 位置参数显示 --------------------
print("位置参数:", args.integers)

# ------------ 选项参数 显示 --------------------
print("选项参数使用:", args.accumulate(args.integers))

# ----------- 选项参数,一个参数多个值 ----------
print("一个选项多个值:", [x for x in permutations(args.permutations)])

# ------------------ 必填选项 --------------
print("必填选项,最小值:", min(args.min))

# ------------ 范围限制选项 ---------------
print("范围限制选项,参数值:", args.num)

# ------------- 参数组 -------------------
if args.show_version:
    print("v1.0")
if args.verbose > 1:
    print("you will get more information")

# ----------- 互斥参数组 ------------------
if args.like:
    print("I like CSDN")
if args.hate:
    print("I hate CSDN")

参考

Python-argparse

更多python相关内容:【python总结】python学习框架梳理

本人b站账号:lady_killer9

有问题请下方评论,转载请注明出处,并附有原文链接,谢谢!如有侵权,请及时联系。如果您感觉有所收获,自愿打赏,可选择支付宝18833895206(小于),您的支持是我不断更新的动力。文章来源地址https://www.toymoban.com/news/detail-403985.html

到了这里,关于Python-argparse命令解析模块详解与代码展示的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python 的 argparse 模块的作用,以及分享一个通用代码模板

    🍉 CSDN 叶庭云 : https://yetingyun.blog.csdn.net/ argparse 是 Python 内置的一个用于命令项选项与参数解析的模块。它的作用是帮助我们处理命令行输入,轻松编写用户友好的命令行接口。 命令行接口的需求 : 假设您编写了一个 Python 脚本,您希望用户能够在运行脚本时提供一些选项

    2024年02月22日
    浏览(46)
  • python中argparse模块关于 parse_args() 函数详解(全)

    原理:命令行解析使用argparse包 作用:命令行传参赋值 可用在机器学习深度学习 或者 脚本运行等 了解这个函数需要了解其背后的原理以及具体参数 在深度学习模型框架中几乎都有的模块 浓缩后的示例代码: 主要的对象值赋参,对应的参数具体如下: 主要有两种情况: 位

    2024年02月16日
    浏览(40)
  • 22 Python的argparse模块

    概述         在上一节,我们介绍了Python的datetime模块,包括:datetime模块中一些常用的属性和函数。在这一节,我们将介绍Python的argparse模块。argparse模块是Python的一个标准库,用于编写命令行界面。它可以处理命令行参数和选项,并生成帮助和使用信息。         该

    2024年02月07日
    浏览(48)
  • Python之使用argparse在命令行读取文件

    关于argparse之parser.add_argument()的用法,这篇文章有较为详细的讲解。因为作业需要,我需要在命令行读入txt文件,网上看了不少博客,都没有直接介绍,而小白在自己尝试的过程中踩了不少坑,尽管做法很简单。这里记在这里。 1.在Python的shell中写一个 ArgparseTry.py 文件,其中

    2023年04月08日
    浏览(80)
  • 【python模块】python解析json文件详解

    JSON(Java Script Object Notation)是一种通常用于以不会“对系统造成负担”的方式传输数据(主要通过 API)的格式。基本原理是利用文本来记录数据点,并将数据点传输给第三方。 JSON是一种使用文本存储数据对象的格式。换句话说,它是一种数据结构,将对象用 文本形式 表示出

    2024年02月08日
    浏览(42)
  • argparse.ArgumentParser() 用法解析

    本文借阅了各网站大佬的经验,已将原文附 Reference 部分,再此表达最诚挚的谢意,如有侵权,本人立即删除! argparse 是一个 Python 模块:命令行选项、参数和子命令解析器。 argparse 模块可以让人 轻松编写用户友好的命令行接口 。程序定义它需要的参数,然后 argparse 将弄清

    2024年02月10日
    浏览(39)
  • 详解ADMM-CSNet(Python代码解析)

    论文名称 : ADMM-CSNet: A Deep Learning Approach for Image Compressive Sensing (ADMM-CSNet:一种用于图像压缩感知的深度学习方法) ⭐️ 论文地址 :https://arxiv.org/abs/1705.06869 本文主要介绍ADMM-CSNet的网络结构及其代码实现部分,关于ADMM算法的具体推导过程大家可以读一下这篇论文: 🔥h

    2024年02月08日
    浏览(38)
  • SDRAM小项目——命令解析模块

    简单介绍: 在FPGA中实现命令解析模块,命令解析模块的用来把pc端传入FPGA中的数据分解为所需要的数据和触发命令,虽然代码不多,但是却十分重要。 SDRAM的整体结构如下,可以看出,命令解析模块cmd_decode负责解析uart_rx中的信息 分析: 命令解析模块主要分离触发信号和需

    2024年01月17日
    浏览(32)
  • 损失函数(Loss Function)一文详解-分类问题常见损失函数Python代码实现+计算原理解析

    目录 前言 一、损失函数概述 二、损失函数分类 1.分类问题的损失函数

    2023年04月26日
    浏览(40)
  • python中的argparse基本用法

    1、argparse是一个python模块,用途是:命令行选项、参数和子命令的解释。 2、使用步骤: 导入argparse模块,并创建解释器 添加所需参数 解析参数 3、用法示例: 4、命令行运行方式 假设上述文件的名字是gf.py 在命令行运行时,则有以下几种情况: python gf.py potato ,这种方式会

    2024年02月12日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包