argparse 模块用法介绍

王 茂南 2022年1月26日07:51:46
评论
3583字阅读11分56秒
摘要本文会对 argparse 的用法进行简单的介绍。包含如何使用「可选参数」传入参数,如何获得传入的参数。最后说明一下 vscode 如何调试带有 argparse 的代码。

简介

argsparsepython 的命令行解析的标准模块,内置于 python,不需要安装。这个库可以让我们直接在命令行中就可以向程序中传入参数并让程序运行。

特别是当我们将代码的功能全部完成之后,想要通过 shell 脚本快速测试不同的内容,这个时候就可以使用 argsparse 传入参数。

参考资料

 

argparse 简单使用

传入参数

首先让我们来看一下最简单的 argsparse 使用的例子。 下面的代码中,我们可以传入一个数字。

  1. import argparse
  2. parser = argparse.ArgumentParser(description='命令行中传入一个数字')
  3. # type是要传入的参数的数据类型  help 是该参数的提示信息
  4. parser.add_argument('integers', type=str, help='传入的数字')
  5. args = parser.parse_args()
  6. #获得传入的参数
  7. print(args)

在运行上面代码的时候,我们可以进行外挂参数。例如首先输入 python demo.py -h 或是 python demo.py --help,可以看到相关的帮助,也就是每一个参数的意思:

argparse 模块用法介绍

接着我们给该文件传入一个参数5,运行结果如下所示。这里得到的这个结果Namespace(integers='5')是一种类似于 python 字典的数据类型。

  1. Namespace(integers='5')

 

操作 args 字典

前面说到,argsparse 会将输入的数转换为 Namespace(integers='5') 的结构。我们可以通过 arg.参数名 来提取参数。稍微修改上面的代码(只需将最后一行变为下面的即可):

  1. # 获得 integers 参数
  2. print(args.integers)

此时在输入 python demo.py 5,就会直接输出 5

 

传入参数的数据类型

add_argument 中有 type 参数可以设置传入参数的数据类型。我们看到代码中有 type 这个关键词,该关键词可以传入 list, str, tuple, set, dict 等。例如我们把上面的 type=str,改成 type=int,这时候我们就可以进行四则运算。

下面的代码中,我们传入两个数字,同时进行求和:

  1. import argparse
  2. parser = argparse.ArgumentParser(description='命令行中传入一个数字')
  3. # type是要传入的参数的数据类型  help 是该参数的提示信息
  4. parser.add_argument('integers_1', type=int, help='传入的数字 1')
  5. parser.add_argument('integers_2', type=int, help='传入的数字 2')
  6. args = parser.parse_args()
  7. sum_value = args.integers_1 + args.integers_2 # 求和
  8. print(f'{args.integers_1} + {args.integers_2} = {sum_value}')

运行上面的代码,传入数字 1020,得到结果是 30,如下所示:argparse 模块用法介绍

 

可选参数(推荐使用)

我们可以在关键词前面加 --,来不按照顺序传入参数。例如在上面的例子中,外面传入的两个参数会分别赋值给 integers_1integers_2,我们也可以指定传入的顺序。

如下所示,我们首先传入 integers_2 的值,接着传入 integers_1 的值,这样就可以不按照 add_argument 的顺序传入参数了:

argparse 模块用法介绍

可选参数虽然写法比较繁琐,但是增加了命令行中的可读性,不容易因为参数传入顺序导致数据错乱。所以还是比较推荐写成「可选参数」的形式的

 

可选参数-短选项

上面的可选参数设置为「长选项」,当然我们也可以设置为「短选项」。我们只需要将参数的传入部分改为如下的内容即可。

  1. parser = argparse.ArgumentParser(description='命令行中传入一个数字')
  2. # type是要传入的参数的数据类型  help 是该参数的提示信息
  3. parser.add_argument('-n_1', '--integers_1', type=int, help='传入的数字 1')
  4. parser.add_argument('-n_2', '--integers_2', type=int, help='传入的数字 2')
  5. args = parser.parse_args()

我们使用 help 来查看一下帮助,可以看到此时每个参数后面都都跟着两种写法,分别是「一个短横」和「两个短横」:

argparse 模块用法介绍

此时我们可以使用下面两种方式来运行该脚本:

  1. python test_argparse.py --integers_2=20 --integers_1=10
  2. python test_argparse.py -n_2=20 -n_1=10

 

argparse 设置参数默认值

add_argument 中有一个 default 参数。有的时候需要对某个参数设置默认值,即如果命令行中没有传入该参数的值,程序使用默认值。如果命令行传入该参数,则程序使用传入的值。

下面看一个具体的例子,上面做两个数的加法,其中第一个数有一个默认值是 100。下面是关键的代码,中间添加了 default 参数:

  1. parser = argparse.ArgumentParser(description='命令行中传入一个数字')
  2. # type是要传入的参数的数据类型  help 是该参数的提示信息
  3. parser.add_argument('-n_1', '--integers_1', type=int, default=100, help='传入的数字 1')
  4. parser.add_argument('-n_2', '--integers_2', type=int, help='传入的数字 2')
  5. args = parser.parse_args()

运行上面的代码的时候,可以不指定第一个参数 n_1,那么默认就是 100。当然也是可以指定的,运行结果如下所示:

argparse 模块用法介绍

 

argparse 设置必须参数

add_argument 有一个 required 参数可以设置该参数是否必需。上面我们指定了第一个参数 n_1 是有默认值的。现在我们加一个 required=True,此时就必须对其输入参数,否则就会出现报错:

我们将 required=True 在第一个参数中加上:

  1. parser = argparse.ArgumentParser(description='命令行中传入一个数字')
  2. # type是要传入的参数的数据类型  help 是该参数的提示信息
  3. parser.add_argument('-n_1', '--integers_1', type=int, default=100, required=True, help='传入的数字 1')
  4. parser.add_argument('-n_2', '--integers_2', type=int, help='传入的数字 2')
  5. args = parser.parse_args()

运行上面的代码。第一次不指定参数 n_1,就会出现报错。第二次进行指定,就可以正常运行。

argparse 模块用法介绍

 

VS Code 调试带有 argparse 的代码

这里我们单独说一下如何使用 vscode 调试带有 argparse 的代码。按照下图,点击对应的图标,此时会打开 launch.json。

argparse 模块用法介绍

接着在 configurations 再添加一个配置,可以将命令行传入的参数放在 args 里面,多个参数就按照下面按顺序写在列表中即可:

  1. {
  2.     "name": "Python: Current File with Args",
  3.     "type": "python",
  4.     "request": "launch",
  5.     "program": "${file}",
  6.     "console": "integratedTerminal",
  7.     "args": ["--key1", "value1", "value2", "--key2", "value3", "value4"],
  8.     "justMyCode": true
  9. }

最后要调试相关代码的时候,如下图所示,首先选中刚刚添加的配置,接着点「调试按钮」即可:

argparse 模块用法介绍

参考资料Visual Studio Code: How debug Python script with arguments

  • 微信公众号
  • 关注微信公众号
  • weinxin
  • QQ群
  • 我们的QQ群号
  • weinxin
王 茂南
  • 本文由 发表于 2022年1月26日07:51:46
  • 转载请务必保留本文链接:https://mathpretty.com/15253.html
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: