背景 命令行参数工具 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 """ @Time : 2020/2/19 12:06 @Author : dreamhomes @File : test.py @Description: test file """ import argparsedef 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 """ @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 """ @Time : 2020/2/19 12:06 @Author : dreamhomes @File : test.py @Description: test file """ import typerdef 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
联系作者