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 库 -> 正文阅读

[Python知识库]python argparse 库

argparse — 命令行选项、参数和子命令解析器

介绍

官方文档:https://docs.python.org/zh-cn/3/library/argparse.html

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

这个库在我们写一些安全工具的时候,比较好用并且这是一个内置库,可以简化我们的代码,和传入参数的调用,生成我们需要的使用说明。

我这里就介绍一下简单的使用,要想要深入的了解可以参考官方文档。

如何简单的使用

这个库的使用分为三步:

  1. 创建一个解析器
  2. 添加参数
  3. 解析参数

简单示例:

import argparse

def sum(a, b):
    return a + b

if __name__ == '__main__':
    # 创建一个解析器
    parse = argparse.ArgumentParser()
    # 添加参数
    parse.add_argument("-num1", type=int, help="数字1")
    parse.add_argument("-num2", type=int, help="数字2")
    # 解析参数
    args = parse.parse_args()

    # args.num1 获取 -num1的值
    print(sum(args.num1, args.num2)) # 30
    
# 使用命令调用 python nmae.py -num1 10 -num2 20

这样我们就完成了 argparse 的简单使用,想要写一个让人心情愉悦的安全工具这样肯定是不行的,我们还需要了解更多的参数来自定义我们的命令解析器。

ArgumentParser 对象

创建一个新的 ArgumentParser对象。所有的参数都应当作为关键字参数传入。每个参数在下面都有它更详细的描述,但简而言之,它们是:

参数说明
prog程序的名称 (默认值: os.path.basename(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
exit_on_error决定当错误发生时是否让 ArgumentParser 附带错误信息退出。 (默认值: True)

在 3.5 版更改: 增加了 allow_abbrev 参数。

在 3.8 版更改: 在之前的版本中,allow_abbrev 还会禁用短旗标分组,例如 -vv 表示为 -v -v

在 3.9 版更改: 添加了 exit_on_error 形参。

上面的参数我们不用全部记住,只需要记住几个常用的参数就行了,我们来优化一下我们示例的代码:

我们使用 description 参数添加一个程序说明:

import argparse

parse = argparse.ArgumentParser(description="用来进行加减乘除的运算")

add_argument() 方法

定义单个的命令行参数应当如何解析。每个形参都在下面有它自己更多的描述,长话短说有:

参数说明
name or flags一个命名或者一个选项字符串的列表,例如 foo-f, --foo
action当参数在命令行中出现时使用的动作基本类型
nargs命令行参数应当消耗的数目
const被一些 actionnargs选择所需求的常数
default当参数未在命令行中出现并且也不存在于命名空间对象时所产生的默认值
type命令行参数应当被转换成的类型
choices可用的参数的容器
required此命令行选项是否可省略 (仅选项可用)
help一个此选项作用的简单描述
metavar在使用方法消息中使用的参数值示例
dest被添加到 parse_args()所返回对象上的属性名

同样的我们不需要全部都记住,我们只需要记住几个常用的参数即可,其中值得注意的是以下两个参数的使用:

  • action:action 命名参数指定了这个命令行参数应当如何处理,以下介绍几个常用的参数。

    store_true and store_false:用来表示bool值,值得注意的是它们的默认值分别为 FalseTrue

    append:存储一个列表,并且将每个参数值追加到列表中

    extend:这会存储一个列表,并将每个参数值加入到列表中,值得注意的是 一定要配合 nargs="+"使用。

  • nargs:nargs 命名参数关联不同数目的命令行参数到单一动作。

*nargs='?' :的一个更普遍用法是允许可选的输入或输出文件:

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

'+':和 '*' 类似,所有当前命令行参数被聚集到一个列表中。

我们使用 add_argument() 方法添加两个命令行参数丰富我们之前的代码:

import argparse

parse = argparse.ArgumentParser(description="用来进行加减乘除的运算")
parse.add_argument(name="-sum", action="extend", nargs="+", help="输入两个数字进行加法运算")
parse.add_argument(name="-sub", action="extend", nargs="+", help="输入两个数字进行减法运算")

parse_args() 方法

将参数字符串转换为对象并将其设为命名空间的属性。 返回带有成员的命名空间。

对于这个方法,没有什么补充的,使用方法也很简单,如下:

import argparse

parse = argparse.ArgumentParser(description="用来进行加减乘除的运算")
parse.add_argument(name="-sum", action="extend", nargs="+", help="输入两个数字进行加法运算")
parse.add_argument(name="-sub", action="extend", nargs="+", help="输入两个数字进行减法运算")
# 
args = parser.parse_args()

如何获取我们输入的值

import argparse

parse = argparse.ArgumentParser(description="用来进行加减乘除的运算")
parse.add_argument(name="-sum", action="extend", nargs="+", help="输入两个数字进行加法运算")
parse.add_argument(name="-sub", action="extend", nargs="+", help="输入两个数字进行减法运算")

args = parser.parse_args()

# 直接使用 aegs.参数名就可以调用输入的值
a = args.sum
# 如果存在输入多个值,可以使用 aegs.参数名[1] 的方式获得我们需要的值
b = args.sum[0]
c = args.sum[1]

代码示例

现在我们来完成我们上面的一个简单代码,实现两位数的加减乘除:

import argparse


# 加法
def sum(a, b):
    return a + b


# 减法
def sub(a, b):
    return a - b


# 乘法
def chenfa(a, b):
    return a * b


# 除法
def chufa(a, b):
    return a / b


if __name__ == '__main__':
    # 创建一个解析器
    parse = argparse.ArgumentParser(description="一个简单的加减乘除的运算程序!")
    # 添加参数
    parse.add_argument("-sum", type=int, action="extend", nargs="+", help="输入要进行加法的数字", )
    parse.add_argument("-sub", type=int, action="extend", nargs="+", help="输入要进行减法的数字")
    parse.add_argument("-chenfa", type=int, action="extend", nargs="+", help="输入要进行乘法的数字")
    parse.add_argument("-chufa", type=int, action="extend", nargs="+", help="输入要进行除法的数字")
    # 解析参数
    args = parse.parse_args()
    
    # 判断使用了哪些算法
    if args.sum != None:
        print(f"{args.sum[0]} + {args.sum[1]} = {sum(args.sum[0], args.sum[1])}")

    elif args.sub != None:
        print(f"{args.sub[0]} - {args.sub[1]} = {sum(args.sub[0], args.sub[1])}")

    elif args.chenfa != None:
        print(f"{args.chenfa[0]} * {args.chenfa[1]} = {sum(args.chenfa[0], args.chenfa[1])}")

    elif args.chufa != None:
        print(f"{args.chufa[0]} / {args.chufa[1]} = {sum(args.chufa[0], args.chufa[1])}")

    else:
        print("请输入正确的参数和参数值进行运算!")

其中值得注意的是如果没有在命令行中调用参数,如 args.sum 的返回结果是 None

这个库还有很多的内容是我没有讲到的,我只是讲了一下简单的运用。如果有需要或者兴趣可以去官方文档中查看相应的应用。

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-09-13 11:10:10  更:2022-09-13 11:11:31 
 
开发: 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/15 9:49:25-

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