python 参数解析_Python 命令行参数解析方法总结

背景

命令行参数工具 Python 中常用的工具,比如做实验希望调节参数的时候,如果参数都是通过硬编码写在代码当中的话,每次修改参数都需要修改对应的代码和逻辑显然这不太方便。比较好的办法就是把必要的参数设置成通过命令行传入的形式,这样我们只需要在运行的时候修改参数就可以了。本文总结下三种好用的参数解析方法。

argparse

argparse 是 Python 自带的命令行解析库,比较常用但是参数解析部分略微有点繁琐,下面例子说明了其用法;

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26# -*- coding: utf-8 -*-

"""

@Time : 2020/2/19 12:06

@Author : dreamhomes

@File : test.py

@Description: test file

"""

import argparse

def params_parser():

parser = argparse.ArgumentParser(description="test")

parser.add_argument('--param1', dest='param1', default='p1', type=str, help='input param1.')

parser.add_argument('--param2', dest='param2', default=1, type=int, help='input param2')

parser.add_argument('--param3', dest='param3', action='store_true', default=False, help='input param3')

return parser.parse_args()

if __name__ == '__main__':

args = params_parser()

print(f"param1: {args.param1}")

print(f"param2: {args.param2}")

print(f"param3: {args.param3}")

以上脚本在命令行中执行输出的结果为:

1

2

3

4➜ test git:(main) ✗ python test.py --param1 shenmengjia --param2 666 --param3

param1: shenmengjia

param2: 666

param3: True

这种参数解析方法的好处是不需要安装其它解析库,Python 自带的库即可解决问题。但是又稍微有点复杂,需要定义参数解析对象来逐一添加参数及其属性。那么有没有稍微简洁的方法呢,答案是有的,下面推荐另一个参数解析库 click。

click

Click 是一个利用很少的代码以可组合的方式创造优雅命令行工具接口的 Python 库。 它是高度可配置的,但却有合理默认值的“命令行接口创建工具”,以函数修饰符的方式来解析参数。详细说明参考官方文档: https://click.palletsprojects.com/en/7.x/

安装方法:pip install click

下面以代码案例说明其用法。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24# -*- coding: utf-8 -*-

"""

@Time : 2020/2/19 12:06

@Author : dreamhomes

@File : test.py

@Description: test file

"""

import click

@click.command("test")

@click.option('--param1', default='shenmengjia', type=str, help='input param1.')

@click.option('--param2', default=2, help='input param2.')

@click.option('--param3', default=True, type=bool, help='input param3.')

def main(param1, param2, param3):

""" parameters parser test """

print(f"param1: {param1}")

print(f"param2: {param2}")

print(f"param3: {param3}")

if __name__ == '__main__':

main()

使用 click 装饰符后就可以实现参数解析,--help 命令即可查看参数属性;

1

2

3

4

5

6

7

8

9

10➜ test git:(main) ✗ python test.py --help

Usage: test.py [OPTIONS]

parameters parser test

Options:

--param1 TEXT input param1.

--param2 INTEGER input param2.

--param3 BOOLEAN input param3.

--help Show this message and exit.

同样地输出结果如下:

1

2

3

4➜ test git:(main) ✗ python test.py --param1 shenmengjia --param2 666 --param3 True

param1: shenmengjia

param2: 666

param3: True

这种方法就比 argparse 库代码简洁多了,不需要定义对象再一一添加参数,需要注意参数和变量名字对应。

那么问题来了,有没有更简洁的方法呢?答案还是有的!!! 下面推荐另一个参数解析库 typer。

typer

Typer 是基于Python 3.6+ 构建CLI应用程序的库,详细介绍文档可以参考官方文档:https://typer.tiangolo.com/,我只能说更强!!!

下面介绍下参数解析的用法。

安装方法:pip install typer

代码示例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29# -*- coding: utf-8 -*-

"""

@Time : 2020/2/19 12:06

@Author : dreamhomes

@File : test.py

@Description: test file

"""

import typer

def main(

param1: str = typer.Option(

default="shenmengjia", help="input param1."

),

param2: int = typer.Option(

default=1, help="input param2."

),

param3: bool = typer.Option(

default=True, help="input param3."

)):

"""parameters parser test"""

print(f"param1: {param1}")

print(f"param2: {param2}")

print(f"param3: {param3}")

if __name__ == '__main__':

typer.run(main)

对比以上两种方法,typer 更加简单,连参数和变量名的对应关系都不需要写!执行效果如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17➜ test git:(main) ✗ python test.py --help

Usage: test.py [OPTIONS]

parameters parser test

Options:

--param1 TEXT input param1. [default: shenmengjia]

--param2 INTEGER input param2. [default: 1]

--param3 / --no-param3 input param3. [default: True]

--install-completion [bash|zsh|fish|powershell|pwsh]

Install completion for the specified shell.

--show-completion [bash|zsh|fish|powershell|pwsh]

Show completion for the specified shell, to

copy it or customize the installation.

--help Show this message and exit.

输出结果:

1

2

3

4➜ test git:(main) ✗ python test.py --param1 shenmengjia --param2 666 --param3

param1: shenmengjia

param2: 666

param3: True

联系作者

dc3d01781814344d00fc81d6dc586653.gif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值