python中argparse模块基础及使用步骤

作者:A-L-Kun 时间:2023-01-26 19:21:59 

argparse模块用法

一、 概念

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

官方文档的位置:【https://docs.python.org/zh-cn/3/library/argparse.html】

在这里我们利用git来演示命令行运行

git -h
git -version
git show

二、 基础

1、 使用步骤

1.1 总步骤

1.导包:
import argparse
2.创建对象:
parser = argparse.ArgumentParser()
3.添加参数:
parser.add_argument()
4.解析参数:
parser.parse_args()

1.2 创建对象

parser = ArgumentParser(prog=None, usage=None,description=None, epilog=None, parents=[],formatter_class=argparse.HelpFormatter, prefix_chars='-',fromfile_prefix_chars=None, argument_default=None,conflict_handler='error', add_help=True)

参数说明:

  1. prog:程序的名字,默认为sys.argv[0],用来在help信息中描述程序的名称

  2. usag:描述程序用途的字符串

  3. description:help信息前的文字

  4. epilog:help信息之后的信息

  5. add_help:是否添加帮助信息

  6. prefix_chars:参数前缀,默认为-

  7. fromfile_prefix_chars:前缀字符,放在文件名之前

  8. argument_default:参数的全局默认值

  9. conflict_hander:对冲突的处理方式,默认为返回错误“error”。还有“resolve”,智能解决冲突。当用户给程序添加了两个一样的命令参数时,“error”就直接报错,提醒用户。而“resolve”则会去掉第一次出现的命令参数重复的部分或者全部(可能是短命令冲突或者全都冲突)

1.3 添加参数

add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])

参数说明:

  • name or flags:参数有两种,可选参数和位置参数。parse_args()运行时,会用-来认证可选参数,剩下的即为位置参数。位置参数必选,可选参数可选

# 可选参数
parser.add_argument("-f", "--foo")
# 位置参数
parser.add_argument("bar")  # 位置参数在运行时一定要输入
  • action:动作,argparse内置6种动作可以在解析到一个参数时进行触发

  • store:保存参数值,可能会先将参数值转换成另一个数据类型。默认动作为这个

  • store_const:保存一个被定义为参数规格一部分的值,而不是一个来自参数解析而来的值。这通常用于实现非布尔值的命令行标记

  • stroe_true/store_false:保存相应的布尔值,这两个动作被用于实现布尔开关

  • append:将值保存到一个列表中。若参数重复出现,则保存多个值

  • append_const:将一个定义在参数规格中的值保存到一个列表中

  • version:打印关于程序的版本信息,然后退出

parse.add_argument('--version',action = 'version',version = '%(prog)s2.0')
  • nargs:参数的数量

  • 值可以为整数,*(任意多个),+(一个或更多)

  • 首先从命令行获取参数,若没有则从const获得,然后从default获得

  • dest:参数值就保存为parse_args()返回的命名空间对象中为该dest参数值的一个属性。如果提供dest="a",那么可以通过args.a访问该参数

  • default:设置参数的默认值

  • type:把从命令行输入的结果转成设置的类型

  • choice:允许的参数值

  • requires:是否必选

  • desk:可作为参数名

  • help:参数命令的介绍

参数的几种写法:

python py.py -i 1  # 使用空格分开
python py.py --integer=1  # 长选项使用等号分开
python py.py -i1  # 短选项可以写一起

1.4 解析参数

args = parser.parse_args()  # 括号里面可以传入命令行的参数
args_ = parser.parse_args("-i=1".split("="))

三、 使用案例

我们可以创建一个模板:

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
__author__ = "A.L.Kun"
__file__ = "demo01.py"
__time__ = "2022/6/16 17:12"
__email__ = "liu.zhong.kun@foxmail.com"
from typing import Callable
from functools import wraps
import sys, argparse
def terminal(param: bool = False):  # 判断是否要使用命令行参数
   def get_params(fun: Callable):
       if param:
           parser = argparse.ArgumentParser(description="help document")
           "---------------------------------------------------------------"
# 如果需要从命令行传入参数时,就在这里添加
           "---------------------------------------------------------------"
           args = parser.parse_args()
       else:
           args = None
       @wraps(fun)
       def inner():
           ret = fun(args)  # 可能在传参数是还要进行其他的初始化操作
           return ret
       return inner
   return get_params
@terminal()  # 使用装饰器
def main(args):
   print(args)
if __name__ == "__main__":
   main()
   sys.exit(0)

使用案例,创建一个程序,可以连接邮箱的SMTP服务

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
__author__ = "A.L.Kun"
__file__ = "demo01.py"
__time__ = "2022/6/16 17:12"
__email__ = "liu.zhong.kun@foxmail.com"
from smtplib import SMTP
from typing import Callable
from functools import wraps
import sys, argparse
def terminal(param: bool = False):
   def get_params(fun: Callable):
       if param:
           parser = argparse.ArgumentParser(description="help document")
           "---------------------------------------------------------------"
           parser.add_argument('--version', "-v", action='version', version='%(prog)s 2.0')
           parser.add_argument("-u", "--username", type=str, help="Enter the SMTP server account", required=True)
           parser.add_argument("-p", "--password", type=str, help="Enter the SMTP server password", required=True)
           "---------------------------------------------------------------"
           args = parser.parse_args()
       else:
           args = None
       @wraps(fun)
       def inner():
           ret = fun(args)
           return ret
       return inner
   return get_params
@terminal(True)
def main(args):
   smtp = SMTP('smtp.qq.com')
   smtp.login(args.username, args.password)
   smtp.quit()
   smtp.close()
if __name__ == "__main__":
   main()
   sys.exit(0)

来源:https://www.cnblogs.com/liuzhongkun/p/16387803.html

标签:python,argparse,模块
0
投稿

猜你喜欢

  • 在Python的gevent框架下执行异步的Solr查询的教程

    2022-12-29 11:26:49
  • Python中requests库的用法详解

    2022-04-12 07:05:16
  • python中使用xlrd、xlwt操作excel表格详解

    2023-06-25 03:59:51
  • JsonServer安装及启动过程图解

    2023-08-12 20:06:02
  • 使用darknet框架的imagenet数据分类预训练操作

    2022-08-03 16:57:44
  • Django基础CBV装饰器和中间件的应用示例

    2023-09-30 06:17:07
  • 用户体验至上的网页设计秘笈

    2007-09-07 10:16:00
  • python数学建模(SciPy+ Numpy+Pandas)

    2021-02-17 11:05:14
  • python全面解析接口返回数据

    2023-09-15 17:02:28
  • Python时间戳使用和相互转换详解

    2023-01-22 08:14:28
  • css元素层叠级别及z-index剖析

    2008-08-29 12:41:00
  • 基于python list对象中嵌套元组使用sort时的排序方法

    2022-11-04 03:38:21
  • JavaScript的replace方法与正则表达式结合应用讲解

    2008-03-06 21:37:00
  • SQL Server日志清除的两种方法

    2009-03-16 17:01:00
  • PHP中类静态调用和范围解析操作符的区别解析

    2023-11-15 07:38:39
  • Python 错误和异常小结

    2021-08-19 12:17:58
  • PHP实现PDF转图片的详细过程(使用imagick)

    2023-09-07 13:27:34
  • python中单下划线(_)和双下划线(__)的特殊用法

    2022-08-09 22:23:22
  • asp如何建立和删除文件夹?

    2009-11-26 20:34:00
  • Python selenium页面加载慢超时的解决方案

    2022-10-15 04:37:43
  • asp之家 网络编程 m.aspxhome.com