Python3 argparse 模块及应用

🎉摘要:本文详细介绍 Python 内置的 argparse 模块,涵盖命令行参数解析的核心功能。内容包括创建解析器、添加位置与可选参数、自动帮助文档生成、参数类型校验及布尔标志位使用。通过实战代码示例,教你如何让 Python 脚本像系统命令一样接收参数,适合 Python 开发者学习。

如果你使用过 Linux 系统,是不是经常通过 --help 查看某个命令的帮助信息,例如:

root@localhost:~# ls --help
Usage: ls [OPTION]... [FILE]...
List information about the FILEs (the current directory by default).
Sort entries alphabetically if none of -cftuvSUX nor --sort is specified.

Mandatory arguments to long options are mandatory for short options too.
  -a, --all                  do not ignore entries starting with .
  -A, --almost-all           do not list implied . and ..
      --author               with -l, print the author of each file
  -b, --escape               print C-style escapes for nongraphic characters
      --block-size=SIZE      with -l, scale sizes by SIZE when printing them;
                               e.g., '--block-size=M'; see SIZE format below
  -B, --ignore-backups       do not list implied entries ending with ~
  -c                         with -lt: sort by, and show, ctime (time of last
                               modification of file status information);
                               with -l: show ctime and sort by name;
                               otherwise: sort by ctime, newest first
...

在 Python 中,内置的 argparse 模块就是用来解析命令行参数和选项的,可以让你的 Python 脚本可以像系统命令一样接收参数、显示帮助、校验输入。

主要功能

argpase 模块主要干下面几件事:

  • 让脚本支持命令行传参,例如:python script.py --name Tom --age 20

  • 使用 -h 或者 --help 时,自动生成帮助文档

  • 自动校验参数类型、必填项、可选值

  • 支持位置参数、可选参数、标志位、子命令等

使用流程

该模块按照下面 4 步固定套路来使用,直接照搬就是:

  1. 创建解析器:argparse.ArgumentParser()

  2. 添加参数:parser.add_argument()

  3. 解析参数:args = parser.parse_args()

  4. 使用参数:通过“args.参数名”获取值

例如:

import argparse

# 创建解析器(description=脚本说明,epilog=结尾说明)
parser = argparse.ArgumentParser(
    description="这是一个 argparse 演示脚本",
    epilog="作者:Python 学习者"
)

# 添加参数
parser.add_argument("name", help="姓名")

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

# 访问参数
print(f"姓名:{args.name}")

注意,add_argument() 是该模块的最常用方法,支持位置参数、可选参数、类型、默认值、必填、帮助信息等。参数常用配置:

参数作用
name/flags参数名:name(位置参数)、--name(可选参数)、-n(短参数)
type参数类型:int/str/float
default默认值
required是否必填(True/False)
help参数帮助说明
choices限定参数可选值(如 ["add", "delete"])
action特殊动作:store_true(布尔标志位)

实战

必填参数

直接使用 ArgumentParser 的 add_argument() 函数添加参数信息,如参数名,类型,帮助信息等。注意,这种参数是必填,必须按顺序传。否则会出现问题:

import argparse

# 创建解析器
parser = argparse.ArgumentParser(description="位置参数示例")

# 添加位置参数(必填)
parser.add_argument("name", help="姓名")
parser.add_argument("age", type=int, help="年龄")

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

# 打印参数
print(f"姓名:{args.name}")
print(f"年龄:{args.age}")

运行结果:

# 传递两个参数
$ python demo.py 张三 25
姓名:张三
年龄:25

# 不传递参数,直接返回错误信息,包含了如何使用命令的说明信息
$ python demo.py
usage: demo.py [-h] name age
demo.py: error: the following arguments are required: name, age

# 如果我们将参数位置整乱了,将姓名传递给age,将年龄传递给name,由于 age 参数类型限制为int
# 因此,将抛出错误信息
$ python demo.py 25 张三
usage: demo.py [-h] name age
demo.py: error: argument age: invalid int value: '张三'

可选参数

演示如何使用可选参数,可选参数需要添加 -- 前缀,例如:

import argparse

parser = argparse.ArgumentParser(description="可选参数示例")

# 可选参数:--city,短参数 -c
# default 用来定义默认值
# help 用来指定帮助信息
parser.add_argument("-c", "--city", default="北京", help="城市,默认北京")
parser.add_argument("-s", "--score", type=float, help="分数")

args = parser.parse_args()

print("城市:", args.city)
print("分数:", args.score)

运行结果:

# 什么参数也不指定,则使用默认值
$ python demo.py        
城市: 北京
分数: None

# 使用 -c 短参数指定城市为“成都”
$ python demo.py -c 成都
城市: 成都
分数: None

# 同时使用 -c 和 -s 指定城市和分数
$ python demo.py -c 成都 -s 90.5
城市: 成都
分数: 90.5

# 可选参数是没有顺序的,因为我们使用 “-参数名 参数值” 进行了绑定
$ python demo.py -s 90.5 -c 成都 
城市: 成都
分数: 90.5

# 注意了,我们可以使用 -h 内置的参数查看帮助信息
# 对照上面代码,是不是一眼就看出 -c --city 的作用以
$ python demo.py -h             
usage: demo.py [-h] [-c CITY] [-s SCORE]

可选参数示例

options:
  -h, --help         show this help message and exit
  -c, --city CITY    城市,默认北京
  -s, --score SCORE  分数

布尔标志位(action="store_true")

布尔标识参数,用于开关选项,指定了这类参数就表示你同意这么去做。如果没有指定该参数,则不开启该功能个。例如 --debug,如果在参数中指定了 --debug 表示开启调试,不指定就不开启调试。例如:

import argparse

# 创建ArgumentParser对象
parser = argparse.ArgumentParser(description="布尔参数示例")

# 定义布尔标志参数
parser.add_argument("-d", "--debug", action="store_true", help="开启调试模式")

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

if args.debug:
    print("调试模式已开启!")
else:
    print("正常模式")

运行结果:

# 正常运行,没有指定任何参数
$ python demo.py   
正常模式

# 指定了 --debug 参数,开启调试
$ python demo.py --debug
调试模式已开启!

# 使用 -d 短参数开启调试
$ python demo.py -d     
调试模式已开启!

# 使用 -h 查看帮助信息
$ python demo.py -h
usage: demo.py [-h] [-d]

布尔参数示例

options:
  -h, --help   show this help message and exit
  -d, --debug  开启调试模式

限定可选值(choices)

设置参数的可选值列表,强制参数只能从指定列表中选一个,例如:

import argparse

# 创建命令行解析器
parser = argparse.ArgumentParser(description="限定值示例")

# 添加命令行参数
parser.add_argument("op", choices=["add", "delete", "query"], help="操作类型")

# 解析命令行参数
args = parser.parse_args()
print("执行操作:", args.op)

运行结果:

# 不携带任何参数,直接出错,参数定义没有添加 -- 前缀,是必选参数
$ python demo.py 
usage: demo.py [-h] {add,delete,query}
demo.py: error: the following arguments are required: op

# 使用可选范围内的值,运行成功
$ python demo.py add
执行操作: add

# 使用可选范围以外的值,运行失败
$ python demo.py find
usage: demo.py [-h] {add,delete,query}
demo.py: error: argument op: invalid choice: 'find' (choose from add, delete, query)

必填参数(required=True)

默认情况下没有添加 -- 前缀的位置参数是必填的,添加了 -- 前缀的参数是可选的,但是我们可以为参数添加 required=True 来强制 -- 开头的参数也必填。例如:

import argparse

parser = argparse.ArgumentParser()
parser.add_argument("-u", "--username", required=True, help="用户名(必填)")

args = parser.parse_args()
print("用户名:", args.username)

运行结果:

$ python demo.py
usage: demo.py [-h] -u USERNAME
demo.py: error: the following arguments are required: -u/--username

$ python demo.py -u 张三 
用户名: 张三

到这里,你应该对 argparse 模块有一定的了解了,更多 argparse 模块内容请参考 https://docs.python.org/3/library/argparse.html 文档。

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
其他应用
公众号