3

python包合集-argparse - Se7eN_HOU

 2 years ago
source link: https://www.cnblogs.com/Se7eN-HOU/p/16689328.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

一、argparse简介

  argparse 是 python 自带的命令行参数解析包,可以用来方便的服务命令行参数,使用之前需要先导入包 import argparse

二、简单案例

  简单使用,创建一个名为test.py的文件

# 导入 argparse 模块
import argparse

# 创建一个argparse 的对象
parser = argparse.ArgumentParser()

# 添加一个接收参数,默认值为Se7eN
parser.add_argument("-n", "--name", default="Se7eN")

# 获取对应的参数的值
args = parser.parse_args()

# 控制台打印出来接收到的值
print("args = {}".format(args))

  打印结果为:

houlei@houleideMacBook-Pro argparse_demo % python3 test.py   # 此时在test.py后面没有跟上参数,
args = Namespace(name='Se7eN')   # 所以打印出来的name为默认值 Se7eN

  再次验证:

houlei@houleideMacBook-Pro argparse_demo % python3 test.py -n HOU   # 此时后面跟上了 -n 参数,并且赋值HOU
args = Namespace(name='HOU')  # 打印出来 name 的值为 HOU
houlei@houleideMacBook-Pro argparse_demo % python3 test.py --name hou  # 此时后面跟上了 --name 参数,并赋值为hou
args = Namespace(name='hou')  # 打印出来的 name 的值为 hou
houlei@houleideMacBook-Pro argparse_demo % 

  在上述代码  parser.add_argument("-n", "--name", default="Se7eN") 中,有两个参数 “-n”和“--name” 分别代表什么?其中-n 和 --name 都是我们自己自定的参数名。至于n和name ,你可以随便起个变量名都可以,但是要注意,前面的一个 “-”和“--”才是关键。

  一个“-”的参数,例如:-n, 他其实相当于我们在liunx中使用的指令,一个自定义的指令。

  两个“--”的参数,例如:--name 他就相当于在程序中,用来接收对对应指令值的变量,例如我们在控制台上输入 python3 test.py -n hou。 其中 -n 就代表使用的 -n 的指令,然后将后面的 hou 的值赋值给对应的变量, -n 对应的变量就是 --name 。所以我们使用print 打印的时候才显示的name = hou

  简单理解:一个“-”的是指令,两个“--”的是接收指令内容的变量。

三、ArgumentParser参数

  ArgumentParse是解析器对象,在创建一个解析器对象的时候,是有很多参数可以配置,下面就演示一下这些参数的使用

  1、prog: 程序的名称(默认值:sys.argv[0])

# 导入 argparse 模块
import argparse

# 创建一个argparse 的对象
parser = argparse.ArgumentParser()

# 添加一个接收参数,默认值为Se7eN
parser.add_argument("-n", "--name", default="Se7eN")

# 获取对应的参数的值
args = parser.parse_args()

# 控制台打印出来接收到的值
print("args = {}".format(args))

  执行代码:

751754-20220913140559788-963753744.png

   修改代码继续演示

# 导入 argparse 模块
import argparse

# 创建一个argparse 的对象
parser = argparse.ArgumentParser(prog="testname")    # 注意这里添加了prog=testname

# 添加一个接收参数,默认值为Se7eN
parser.add_argument("-n", "--name", default="Se7eN")

# 获取对应的参数的值
args = parser.parse_args()

# 控制台打印出来接收到的值
print("args = {}".format(args))
751754-20220913140749893-1424553949.png

  2、usage: 用来描述该程序的用途,并且会覆盖原来的prog的显示

  修改部分程序:

# 创建一个argparse 的对象
parser = argparse.ArgumentParser(prog="testname", usage="这是功能描述模块")
751754-20220913141239695-2101939661.png

  3、description:帮助文档的描述和uasge功能类似,只是显示的位置不一样

  继续修改部分代码:

# 创建一个argparse 的对象
parser = argparse.ArgumentParser(prog="testname", usage="这是功能描述模块", description="这是程序的介绍,和usage的功能模块描述类似")
751754-20220913141541720-922689898.png

  4、epilog:帮助文档的额外说明,位置在最下面

  继续修改部分代码:

# 创建一个argparse 的对象
parser = argparse.ArgumentParser(prog="testname", usage="这是功能描述模块", description="这是程序的介绍,和usage的功能模块描述类似", epilog="额外说明")

  展示结果:

751754-20220913142107107-1832289040.png

   5、自定义指令的前缀:默认是"-" 和 "--",这里如果你不喜欢使用,也可以自通过该参数自己指定前缀,个人觉得没必要。

  代码演示:

# 导入 argparse 模块
import argparse

# 创建一个argparse 的对象 ,并通过prefix_chars 指定指令的前缀为 '+'
parser = argparse.ArgumentParser(prog="testname", usage="这是功能描述模块", description="这是程序的介绍,和usage的功能模块描述类似", epilog="额外说明", prefix_chars='+')

# 添加一个接收参数,默认值为Se7eN,这里的指令只能使用+ 表示,否则会报错
parser.add_argument("+n", "++name", default="Se7eN")

# 获取对应的参数的值
args = parser.parse_args()

# 控制台打印出来接收到的值
print("args = {}".format(args))
751754-20220913142908931-1661053836.png

四、add_argument指令参数解释

    1、action: 的作用比较多,有保存布尔类型,常量类型,数组类型的参数的功能

      注意1:使用action = store_true/store_false 时修饰的指令是不能赋值的,其对应的指令的值是布尔类型的

      注意2:使用action = store_const 时修饰的指令的是不能赋值,其对应的指令的值常量类型

      注意3:使用action = append 是可以复制,其对应的值会将该指令对应的值放在一个数组中

      1.1 先来演示:使用action,保存布尔类型的指令的值:store_true/store_false:保存布尔类型的变量:
# 导入 argparse 模块
import argparse

# 创建一个argparse 的对象
parser = argparse.ArgumentParser(prog="testname", usage="这是功能描述模块", description="这是程序的介绍,和usage的功能模块描述类似", epilog="额外说明")

# 添加一个接收参数 -n,action = store_true 表示,在使用的时候,如果填写了该指令,那么该指令对应的值就是true,如果没有使用该指令,则为空
parser.add_argument("-n", "--name", action='store_true')

# 获取对应的参数的值
args = parser.parse_args()

# 控制台打印出来接收到的值
print("args = {}".format(args))

  执行结果:

751754-20220913145422193-1050449351.png

      1.2、使用action设置常量指令

    修改代码演示:

# 添加一个接收参数 -n,action = store_const 表示,在使用的时候,如果填写了该指令,那么该指就等于10 如果没写就等于空
parser.add_argument("-n", "--name", action='store_const',const=10)

    执行结果:

751754-20220913150132848-69595172.png

      1.3、使用action设置数组类型的指令

    修改代码演示:

# 添加一个接收参数 -n,action = append, 会把该指令的值放在数组中
parser.add_argument("-n", "--name", action='append')
751754-20220913151042158-2121822060.png

    2、nargs参数:表示该指令接收值的个数:

import argparse

# 创建一个argparse 的对象
parser = argparse.ArgumentParser(prog="testname", usage="这是功能描述模块", description="这是程序的介绍,和usage的功能模块描述类似", epilog="额外说明")

# 添加一个接收参数 -n, 并且该参数还必须要接收2个值,会放在一个数组中,其中nargs等于几,就表示要接受几个参数
parser.add_argument("-n", "--name", nargs=2)

# 获取对应的参数的值
args = parser.parse_args()

# 控制台打印出来接收到的值
print("args = {}".format(args))

    运行结果:

751754-20220913152559891-1286757364.png
# 导入 argparse 模块
import argparse

# 创建一个argparse 的对象
parser = argparse.ArgumentParser(prog="testname", usage="这是功能描述模块", description="这是程序的介绍,和usage的功能模块描述类似", epilog="额外说明")

# 添加一个接收参数 -n,
# nargs = "?" :  表示只接收1个参数,正则表达式的写法
# nargs = "+" :  表示接收1一个或多个参数
# nargs = "*" :  表示接收0个或者多个参数
parser.add_argument("-n", "--name", nargs="*")

# 获取对应的参数的值
args = parser.parse_args()

# 控制台打印出来接收到的值
print("args = {}".format(args))

    打印结果就不演示了

    3、required 该指令是必须的

# 导入 argparse 模块
import argparse

# 创建一个argparse 的对象
parser = argparse.ArgumentParser(prog="testname", usage="这是功能描述模块", description="这是程序的介绍,和usage的功能模块描述类似", epilog="额外说明")

# 添加一个接收参数 -n,
# nargs = "?" :  表示只接收1个参数,正则表达式的写法
# nargs = "+" :  表示接收1一个或多个参数
# nargs = "*" :  表示接收0个或者多个参数
parser.add_argument("-n", "--name", nargs="*", required=True)

# 获取对应的参数的值
args = parser.parse_args()

# 控制台打印出来接收到的值
print("args = {}".format(args))

    演示结果:

751754-20220913153237669-2051965217.png

    4、choices:如有choices选项,则该指令的值只能是choices中的一个

# 导入 argparse 模块
import argparse

# 创建一个argparse 的对象
parser = argparse.ArgumentParser(prog="testname", usage="这是功能描述模块", description="这是程序的介绍,和usage的功能模块描述类似", epilog="额外说明")

# 添加一个接收参数 -n,
# nargs = "?" :  表示只接收1个参数,正则表达式的写法
# nargs = "+" :  表示接收1一个或多个参数
# nargs = "*" :  表示接收0个或者多个参数
parser.add_argument("-n", "--name", nargs="*", required=True, choices=['zhangsan', 'lisi'])

# 获取对应的参数的值
args = parser.parse_args()

# 控制台打印出来接收到的值
print("args = {}".format(args))

    运行结果:

751754-20220913153543073-1733642955.png

五、vars()

  vars()方法可以将parser对象变成字典,方便使用

# 导入 argparse 模块
import argparse

# 创建一个argparse 的对象
parser = argparse.ArgumentParser(prog="testname", usage="这是功能描述模块", description="这是程序的介绍,和usage的功能模块描述类似", epilog="额外说明")

# 添加一个接收参数 -n,
# nargs = "?" :  表示只接收1个参数,正则表达式的写法
# nargs = "+" :  表示接收1一个或多个参数
# nargs = "*" :  表示接收0个或者多个参数
parser.add_argument("-n", "--name", nargs="*", required=True, choices=['zhangsan', 'lisi'])

# 获取对应的参数的值
args = parser.parse_args()

# 控制台打印出来接收到的值
print("args = {}".format(args))

# 将parser 变成字典对象
print('arg_vars = {}'.format(vars(args)))

  输出结果:

751754-20220913153903899-448545855.png

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK