Python: argparse模块

embedded/2024/11/14 12:43:09/

1. 导入模块和创建解析器

argparse 是 Python 标准库中用于命令行参数解析的模块。你首先需要导入 argparse,然后创建一个 ArgumentParser 对象,该对象将负责解析命令行参数。
(感觉和Java中,main 方法的 String[] args有点像,但Py的功能强大很多)

python">import argparseparser = argparse.ArgumentParser()

2. 添加位置参数

位置参数是指在命令行中必须按顺序提供的参数。这些参数的顺序非常重要,程序会根据顺序来解析它们。

示例 1:基本的命令行参数
python">import argparseparser = argparse.ArgumentParser()
parser.add_argument("echo")
args = parser.parse_args()
print(args.echo)

运行结果:

python prog.py hello
hello

在这个例子中,echo 是一个位置参数,用户必须提供它。parse_args() 会将命令行中提供的值存储在 args 对象中,并且可以通过 args.echo 来访问它。

示例 2:给位置参数添加帮助信息
python">import argparseparser = argparse.ArgumentParser()
parser.add_argument("echo", help="Echo the string you provide")
args = parser.parse_args()
print(args.echo)

运行结果:

python prog.py --help
usage: prog.py [-h] echo
prog.py: error: the following arguments are required: echo

这将为 echo 参数提供详细的帮助信息,帮助用户理解该参数的作用。

3. 添加可选参数

可选参数不需要按顺序提供,通常以 -- 开头。你可以为它们指定默认值或指定 type 来限制输入。

示例 3:基本的可选参数
python">import argparseparser = argparse.ArgumentParser()
parser.add_argument("--verbosity", help="Increase output verbosity")
args = parser.parse_args()
if args.verbosity:print("verbosity turned on")

运行结果:

python prog.py --verbosity
verbosity turned on

在这个例子中,--verbosity 是一个可选参数。当用户指定该选项时,程序会打印一条消息。

示例 4:带有 store_true 的可选参数

如果你只想要一个标志,argparse 提供了 action="store_true",如果指定该参数,则将值设置为 True,否则为 False

python">import argparseparser = argparse.ArgumentParser()
parser.add_argument("--verbose", help="Increase output verbosity", action="store_true")
args = parser.parse_args()
if args.verbose:print("verbosity turned on")

运行结果:

python prog.py --verbose
verbosity turned on

如果不指定 --verbose,程序就不会打印任何东西。

4. 位置参数与可选参数的组合

你可以将位置参数和可选参数结合起来使用。

示例 5:结合位置参数和可选参数
python">import argparseparser = argparse.ArgumentParser()
parser.add_argument("square", type=int, help="Display a square of a given number")
parser.add_argument("-v", "--verbose", action="store_true", help="Increase output verbosity")
args = parser.parse_args()
answer = args.square**2
if args.verbose:print(f"The square of {args.square} is {answer}")
else:print(answer)

运行结果:

python prog.py 4
16python prog.py 4 --verbose
The square of 4 is 16

在这个例子中,square 是位置参数,-v--verbose 是可选参数。若提供 -v,程序将输出更详细的结果。

5. 参数类型

默认情况下,argparse 会将所有传递给参数的值视为字符串,但你可以指定其他类型,例如 intfloat 等。

示例 6:指定类型
python">import argparseparser = argparse.ArgumentParser()
parser.add_argument("number", type=int, help="A number to square")
args = parser.parse_args()
print(args.number**2)

运行结果:

python prog.py 4
16

在这个例子中,number 参数的类型被指定为 int,因此输入的字符串会被转换为整数。

6. 选择特定的值

你可以通过 choices 参数限制某个可选参数接受的值。

示例 7:限制可选参数的值
python">import argparseparser = argparse.ArgumentParser()
parser.add_argument("-v", "--verbosity", choices=[0, 1, 2], help="Set verbosity level")
args = parser.parse_args()
print(f"Verbosity level: {args.verbosity}")

运行结果:

python prog.py --verbosity 1
Verbosity level: 1python prog.py --verbosity 3
usage: prog.py [-h] [-v {0,1,2}]
prog.py: error: argument -v/--verbosity: invalid choice: 3 (choose from 0, 1, 2)

7. 计数标志

如果你希望某个可选参数通过出现的次数来控制某些行为,你可以使用 action="count"

示例 8:计数标志
python">import argparseparser = argparse.ArgumentParser()
parser.add_argument("-v", "--verbosity", action="count", help="Increase verbosity")
args = parser.parse_args()
print(f"Verbosity level: {args.verbosity}")

运行结果:

python prog.py
Verbosity level: Nonepython prog.py -v
Verbosity level: 1python prog.py -vv
Verbosity level: 2

8. 默认值

当你没有指定参数时,可以为参数提供默认值。

示例 9:使用默认值
python">import argparseparser = argparse.ArgumentParser()
parser.add_argument("-v", "--verbosity", action="count", default=0, help="Increase verbosity")
args = parser.parse_args()
print(f"Verbosity level: {args.verbosity}")

运行结果:

python prog.py
Verbosity level: 0python prog.py -v
Verbosity level: 1

在这个例子中,当没有指定 -v 参数时,args.verbosity 的默认值为 0


http://www.ppmy.cn/embedded/136444.html

相关文章

分组校验在Spring中的应用详解

目录 前言1. 什么是分组校验2. 分组校验的基本原理3. 分组校验的实现步骤3.1 定义分组接口3.2 在校验项中指定分组3.3 校验时指定要校验的分组3.4 默认分组和分组的继承 4. 分组校验的优势和适用场景4.1 优势4.2 适用场景 5. 常见问题与解决方案5.1 校验未生效5.2 无法识别默认…

[面试]关于Redis 的持久化你了解吗

Redis的持久化是指Redis服务器在关闭或重启时,将内存中的数据保存到磁盘上的一种机制。Redis支持多种持久化方式。 一、RDB(Redis Database)持久化 RDB持久化是Redis默认采用的持久化方式,它将Redis在某个时间点的数据保存到磁盘上…

QT模态对话框和非模态对话框区别以及常用标准对话框

QT模态对话框和非模态对话框区别以及常用标准对话框 1.概述 这篇文章介绍下对话框的分类,它分为模态对话框和非模态对话框。 模态对话框:打开对话框后,不能操作其他窗口 非模态对话框:打开对话框后,可以操作其他窗口…

Risc-v:mhartid寄存器

简介 mhartid(Machine Hart ID Register)是 RISC-V 架构中的一个控制和状态寄存器(CSR),用于存储当前硬件线程(hart)的标识符。 在多核处理器中,每个核心可能有一个或多个硬件线程&a…

页面上的内容的生成图片后,保存为word,并下载

页面上的内容的生成图片后&#xff0c;保存为word&#xff0c;并下载 juqery <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Download Page Screenshot as Word</title><script src"h…

el-scrollbar 动态更新内容 鼠标滚轮无效

有以下功能逻辑&#xff0c;实现了一个时间轴组件&#xff0c;点击、-号后像地图那样放大组件以显示不同的UI。 默认显示年月&#xff1a; 当点击一下加号时切换为年&#xff1a; 当点击减号时切换为日&#xff1a; 即加号、减号点击就是在年月日显示进行切换。给Scrollvie…

Java并发无锁篇--乐观锁(非阻塞)

共享模型之无锁 问题提出 package com.zjy.unlock;import java.util.ArrayList; import java.util.List;public class AccountDemo {public static void main(String[] args) {Account account new AccountUnsafe(10000);Account.demo(account);} }class AccountUnsafe impl…

java.lang.NoClassDefFoundError: org/springframework/aot/AotDetector问题解决

原因&#xff1a;mybatis版本问题 由于项目需要部署服务器上&#xff0c;需要将一系列依赖进行升级 到mybatis时&#xff0c;会出现这个问题 参考mybatis-spring官网可以看到mybatis-spring mybatis、mybatis-spring、spring依赖和jdk版本不对应&#xff0c;因此爆错 解决方法&…