Python 高效命令行参数解析方法总结


原文地址: https://dreamhomes.github.io/posts/202101161752.html


背景

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

argparse

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

# -*- 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}")

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

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

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

# -*- 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 命令即可查看参数属性;

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.

同样地输出结果如下:

➜  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

代码示例:

# -*- 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 更加简单,连参数和变量名的对应关系都不需要写!执行效果如下:

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.

输出结果:

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

联系作者

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值