argparse 的简单使用

常规使用

基本流程

  • import argparse: 导入 argparse 模块;
  • parser = argparse.ArgumentParser(description="program to test"): 创建一个 parser 参数解析器;
  • parser.add_argument(): 添加命令行需要的选项及参数,同时可以对其进行描述和限制;
  • args = parser.parse_args(): 进行参数解析;

程序用法帮助

argparse.ArgumentParser(description="program to test")

  • 用法:argparse.ArgumentParser(description="write usage here")
  • 示例:
import argparse

parser = argparse.ArgumentParser(description="program to test")
parser.add_argument("d")
args = parser.parse_args()

print(args.d)

1

可以看到,当输入 -h 或者 --help 程序会输出相应的程序描述。

位置参数

position arguments

  • 用法:parser.add_argument(“d”),注意不带 -,这要求用户必须输入该参数;
  • 示例:
import argparse

parser = argparse.ArgumentParser(description="program to test")
parser.add_argument("d")
args = parser.parse_args()

print(args.e)

2

可以看到,当使用位置参数时,如果不输入参数时,程序会报错提醒输入位置参数;正确输入参数时,程序正常运行。

可选参数

optional arguments

  • 用法:parser.add_argument(“-d”,"--dir"),这里可以使用一个 - 也可以使用两个。一个代表参数,两个代表长参数。
  • 示例:
import argparse

parser = argparse.ArgumentParser(description="program to test")
parser.add_argument("-d", "--dir")
args = parser.parse_args()

try:
print(args.dir)
except AttributeError:
print("Error: 没有 dir 该参数!")

try:
print(args.d)
except AttributeError:
print("Error: 没有 d 该参数!")

3

可以看到,参数解析器优先选择长参数作为属性的键值,当使用可选参数时,-d--dir 均可以实现参数的接收;不使用时,该参数时不存在的。

add_argument 常用属性介绍

type 参数类型

  • 用法:parser.add_argument(type = int),这里默认为 str 类型,当使用其他类型时会自动将输入进行类型转换,若无法转换则会出错。
  • 示例:
import argparse

parser = argparse.ArgumentParser(description="program to test")
parser.add_argument("d", type=int)
args = parser.parse_args()

print(args.d)

4

可以看到,当按要求输入 int 类型数据时,程序正常接收并运行;当使用 “test” 该类字符串数据,将会报错,并提示所需数据类型。

choices 可选值

  • 用法:parser.add_argument(choices = ["test","main"]),这里确定该参数输入只能从choices中进行选择。
  • 示例:
import argparse

parser = argparse.ArgumentParser(description="program to test")
parser.add_argument("d", choices=["0", "1"])
args = parser.parse_args()

print(args.d)

5

可以看到,当我们输入 choices 中的值时,程序正常接收并运行;当使用不在该列表中的数据时,将会报错,并提示可选数据值。

default 参数默认值

  • 用法:parser.add_argument(default = "test"),这意味着当该参数不进行输入时,会取默认值作为参数。
  • 示例:
import argparse

parser = argparse.ArgumentParser(description="program to test")
parser.add_argument("-d", default=1)
args = parser.parse_args()

print(args.d)

6

可以看到,当启用参数并进行输入时,参数随之变化;当我们不输入参数时,参数会取默认值。

:::tip
要注意的是,这类参数必须是可选参数,当使用位置参数时,程序会强制要求你输入参数,默认值就不会起作用(反正我尝试了多次发现都是不行的)
:::

nargs 参数数目

  • 用法:parser.add_argument(nargs = 5),可以指定一个参数后面可以跟随几个值。其中参数设置有如下类型:
类型 效果
num 固定 num 个值,值会放到一个列表中。
” ? “ 可以跟随值(1 个),也可以不跟随值。
" * " 可以跟任意多值,参数会放在列表中。
" + " 最少跟一个值,参数会放在列表中。
  • 示例:
import argparse

parser = argparse.ArgumentParser(description="program to test")
parser.add_argument("-d", nargs="*")
args = parser.parse_args()

try:
print(args.d)
except AttributeError:
print("Error: 没有 d 该参数!")

7

可以看到,这里我们使用的是 ” * “,当启用参数并进行输入时,我们可以输入 0 个,也可以多个,最终会放在列表里面。

action 动作

  • 用法:parser.add_argument(action = "store_true"),这里是对该参数的动作。该部分
类型 效果
store 保存参数值(默认 action)
store_const 关键字const配合使用,保存关键字const的值(类似于 default,但是不可修改)
store_true 保存值为True(类似于带开关的 default = True)
store_false 保存值为False(类似于带开关的 default = False)
append 保存多次选项值为列表(需要多次使用 -d 进行参数输入)
append_const 关键字const配合使用,保存关键字const的值为列表(往往多个不同选项值需要存储到相同成员列表)
  • 示例:
import argparse

parser = argparse.ArgumentParser(description="program to test")
parser.add_argument("-d", action="store_true")
parser.add_argument("-t", action="append")
parser.add_argument("-m", action="store_const", const=42)
args = parser.parse_args()

if args.d:
try:
print("here is t:", args.t)
print("here is m:", args.m)
except AttributeError:
print("Error: 没有 t,m 参数!")
else:
print("未开启开关 d !")

8

可以看到,当我们不使用 -d 参数时,程序会停留在判断阶段;使用后进入输出流程;使用 -t 参数时,多次使用可以进行多次值的添加;使用 -m 参数时,会将 const 值添加进入,当尝试修改时,会出现报错信息。

其他参数

  • required: 表明参数是否是必须的,只对可选参数有效。
  • help:对该参数的简要说明。
  • metavar:用于指明在帮助说明中,该参数有意义的值是多少。
  • dest:用于指明该命令行参数在获取参数时候的属性是什么(不指定时,按照长参数命名优先的策略)。
  • const:如果命令行没有传入该参数,const 指定该参数的默认值,在某些 action 与 nargs 类型下才起作用。