详解Python中的argparse模块

 更新时间:2023年07月29日 11:08:19   作者:肖申克的陪伴  
这篇文章主要介绍了详解Python中的argparse模块,argparse可以让你轻松地编写用户友好的命令行界面,定义你的程序需要的参数,自动生成帮助和用法信息,需要的朋友可以参考下

argparse模块

argparse是一个用于解析命令行参数和选项的python标准库模块。

它可以让你轻松地编写用户友好的命令行界面,定义你的程序需要的参数,自动生成帮助和用法信息,以及处理用户给出的无效参数。

在这篇博客中,我将介绍argparse的基本用法,以及一些高级功能,如子命令、互斥组、文件类型等。

我将用丰富的例子和解释来帮助你理解和掌握argparse的使用方法。

一、一个最简单的示例

使用argparse,你可以指定程序所需的参数、选项以及如何解析它们。

下面是一个基本的示例,演示了如何使用argparse来解析命令行参数:

import argparse
# 创建ArgumentParser对象
parser = argparse.ArgumentParser(description='这是一个使用argparse的示例程序')
# 添加位置参数
parser.add_argument('name', help='姓名')
parser.add_argument('age', type=int, help='年龄')
# 添加可选参数
parser.add_argument('--gender', choices=['male', 'female'], help='性别')
parser.add_argument('--height', type=float, help='身高')
# 解析命令行参数
args = parser.parse_args()
# 访问解析后的参数
print(f'姓名: {args.name}')
print(f'年龄: {args.age}')
print(f'性别: {args.gender}')
print(f'身高: {args.height}')

在上面的示例中,我们首先创建了一个ArgumentParser对象,并提供了一个描述性的文字作为参数。

然后,我们添加了两个位置参数(name和age),并分别指定了它们的帮助文本。

接下来,我们添加了两个可选参数(–gender和–height),并使用choices和type参数限制了它们的取值范围和类型。

最后,我们调用parse_args()方法来解析命令行参数,并将解析后的结果存储在args变量中。我们可以通过访问args对象的属性来获取解析后的参数值,并进行相应的处理。

例如,如果我们在命令行中运行上述代码并提供以下输入:

python my_program.py John 25 --gender male --height 1.75

输出将是:

姓名: John
年龄: 25
性别: male
身高: 1.75

或者在pycharm输入这些参数:

在这里插入图片描述

这样可以获得相同的结果:

在这里插入图片描述

如果不输入默认参数直接运行,会如下图的报错:

在这里插入图片描述

二 、详细参数讲解

创建一个解析器

要使用argparse,首先你需要创建一个argparse.ArgumentParser的实例,它是一个包含参数规范和一些全局选项的容器。

你可以在创建时传入一些参数,如程序名、描述、帮助信息等,来定制你的解析器。

例如:

import argparse
# 创建一个解析器
parser = argparse.ArgumentParser(
    prog="myprog", # 程序名,默认为sys.argv[0]
    description="This is a program that does something", # 程序描述
    epilog="This is some text at the bottom of help" # 帮助信息底部的文本
)

添加参数

创建了一个解析器后,你需要用add_argument()方法来添加你想要解析的参数。

argparse支持两种类型的参数:位置参数和可选参数。

位置参数是根据它们在命令行中出现的位置来识别的,它们通常是必须提供的参数。

例如:

# 添加一个位置参数
parser.add_argument("filename", help="the name of the file to process")

可选参数是根据它们前面的短横线或双横线来识别的,它们通常是可以省略或指定不同值的参数。例如:

# 添加一个可选参数
parser.add_argument("-v", "--verbose", help="increase output verbosity", action="store_true")

add_argument()方法可以接受很多参数来定制你的参数行为和属性,如类型、默认值、选项、必需性、帮助信息等。你可以查看[argparse文档]来了解更多细节。

解析参数

添加了所有想要解析的参数后,你可以用parse_args()方法来运行解析器,并将提取出来的数据放在一个argparse.Namespace对象中。例如:

# 解析参数
args = parser.parse_args()
# 使用参数
if args.verbose:
    print(f"Processing {args.filename} in verbose mode")
else:
    print(f"Processing {args.filename}")

如果用户给出了无效或不符合规范的参数,argparse会自动报错并退出程序。如果用户没有给出任何参数或给出了-h或–help选项,argparse会自动打印帮助信息并退出程序。

子命令

有时候,你可能想要让你的程序支持不同的子命令,就像git或pip那样。例如:

$ git clone https://github.com/python/cpython.git
$ git status
$ git commit -m "some message"

要实现这个功能,你可以使用add_subparsers()方法来创建一个子解析器,并为每个子命令添加一个子解析器。例如:

# 创建一个主解析器
parser = argparse.ArgumentParser(description="A simple calculator")
# 创建一个子解析器
subparsers = parser.add_subparsers(help="sub-command help")
# 为每个子命令添加一个子解析器
parser_add = subparsers.add_parser("add", help="add two numbers")
parser_add.add_argument("x", type=int, help="the first number")
parser_add.add_argument("y", type=int, help="the second number")
parser_sub = subparsers.add_parser("sub", help="subtract two numbers")
parser_sub.add_argument("x", type=int, help="the first number")
parser_sub.add_argument("y", type=int, help="the second number")
parser_mul = subparsers.add_parser("mul", help="multiply two numbers")
parser_mul.add_argument("x", type=int, help="the first number")
parser_mul.add_argument("y", type=int, help="the second number")
parser_div = subparsers.add_parser("div", help="divide two numbers")
parser_div.add_argument("x", type=int, help="the first number")
parser_div.add_argument("y", type=int, help="the second number")
# 解析参数
args = parser.parse_args()
# 使用参数
if args.subcommand == "add":
    print(args.x + args.y)
elif args.subcommand == "sub":
    print(args.x - args.y)
elif args.subcommand == "mul":
    print(args.x * args.y)
elif args.subcommand == "div":
    print(args.x / args.y)

互斥组

有时候,你可能想要让你的程序只接受一些互斥的选项,即不能同时出现的选项。例如:

$ python3 prog.py -a
$ python3 prog.py -b
$ python3 prog.py -a -b # 错误

要实现这个功能,你可以使用add_mutually_exclusive_group()方法来创建一个互斥组,并为该组添加一些选项。例如:

# 创建一个解析器
parser = argparse.ArgumentParser(description="A simple program")
# 创建一个互斥组
group = parser.add_mutually_exclusive_group()
# 为该组添加一些选项
group.add_argument("-a", action="store_true")
group.add_argument("-b", action="store_true")
# 解析参数
args = parser.parse_args()
# 使用参数
if args.a:
    print("Option A is selected")
elif args.b:
    print("Option B is selected")
else:
    print("No option is selected")

文件类型

有时候,你可能想要让你的程序接受一个文件名作为参数,并自动打开或创建该文件。例如:

$ python3 prog.py input.txt output.txt

要实现这个功能,你可以使用argparse.FileType类来指定你的参数的类型,它会返回一个类似于open()函数返回的文件对象。例如:

# 创建一个解析器
parser = argparse.ArgumentParser(description="A simple program that reads from a file and writes to another file")
# 添加两个文件类型的参数
parser.add_argument("infile", type=argparse.FileType("r"), help="the input file")
parser.add_argument("outfile", type=argparse.FileType("w"), help="the output file")
# 解析参数
args = parser.parse_args()
# 使用参数
for line in args.infile:
    args.outfile.write(line.upper())

总结

argparse是Python标准库中一个强大而灵活的模块,用于解析命令行参数和生成美观的帮助文档。

无论是简单的脚本还是复杂的应用程序,argparse都能帮助开发者轻松地处理各种命令行参数,并提供友好的用户界面。

通过使用argparse,开发者可以定义参数的类型、默认值、限制条件以及互斥关系,从而确保命令行输入的合法性和一致性。

无需编写繁琐的解析代码,argparse的简洁接口使得命令行参数的处理变得简单而愉快。

不仅如此,argparse还能自动生成详细的帮助文档,为用户提供清晰明了的命令行使用说明。

在Python中,argparse被广泛应用于各种项目,成为处理命令行参数的首选工具。

无论是初学者还是有经验的开发者,掌握argparse的使用技巧都将极大地提升命令行工具的质量和用户体验。

到此这篇关于详解Python中的argparse模块的文章就介绍到这了,更多相关Python的argparse模块内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 使用Python和scikit-learn创建混淆矩阵的示例详解

    使用Python和scikit-learn创建混淆矩阵的示例详解

    这篇文章主要介绍了使用Python和scikit-learn创建混淆矩阵的示例详解,该示例包括生成数据集、为数据集选择合适的机器学习模型、构建、配置和训练它,最后解释结果,即混淆矩阵,需要的朋友可以参考下
    2022-06-06
  • python实现反转部分单向链表

    python实现反转部分单向链表

    这篇文章主要为大家详细介绍了python实现反转部分单向链表,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-09-09
  • 如何利用Python快速统计文本的行数

    如何利用Python快速统计文本的行数

    这篇文章主要介绍了如何利用Python快速统计文本的行数,要快速统计一个文本文件中的行数,其实就是要统计这个文本文件中换行符的个数,下面我们就一起进入文章看看具体的操作过程吧
    2021-12-12
  • Python检测端口IP字符串是否合法

    Python检测端口IP字符串是否合法

    这篇文章主要介绍了Python检测端口IP字符串是否合法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • OpenAI Function Calling特性示例详解

    OpenAI Function Calling特性示例详解

    这篇文章主要为大家介绍了OpenAI Function Calling特性作用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • django安装xadmin及问题解决

    django安装xadmin及问题解决

    本文主要介绍了django安装xadmin及问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • python操作docx写入内容,并控制文本的字体颜色

    python操作docx写入内容,并控制文本的字体颜色

    今天小编就为大家分享一篇python操作docx写入内容,并控制文本的字体颜色,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • 你可能不知道的Python 技巧小结

    你可能不知道的Python 技巧小结

    有许许多多文章写了 Python 中的许多很酷的特性,例如变量解包、偏函数、枚举可迭代对象,但是关于 Python 还有很多要讨论的话题,因此在本文中,我将尝试展示一些我知道的和在使用的,但很少在其它文章提到过的特性。那就开始吧
    2020-01-01
  • Python3如何对urllib和urllib2进行重构

    Python3如何对urllib和urllib2进行重构

    这篇文章主要介绍了Python3如何对urllib和urllib2进行重构,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • 用Python实现一个简单的多线程TCP服务器的教程

    用Python实现一个简单的多线程TCP服务器的教程

    这篇文章主要介绍了用Python实现一个简单的多线程TCP服务器的教程,示例的运行环境为Windows操作系统,需要的朋友可以参考下
    2015-05-05

最新评论