python中argparse模块怎么使用
本篇内容主要讲解“python中argparse模块怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“python中argparse模块怎么使用”吧!
argparse模块用法
一、 概念
argsparse是python的命令行解析的标准模块,内置于python,不需要安装。这个库可以让我们直接在命令行中就可以向程序中传入参数并让程序运行。
在这里我们利用git
来演示命令行运行
git -hgit -version git show
二、 基础
1、 使用步骤
1.1 总步骤
1.导包:import argparse2.创建对象: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)
参数说明:
prog:程序的名字,默认为sys.argv[0],用来在help信息中描述程序的名称
usag:描述程序用途的字符串
description:help信息前的文字
epilog:help信息之后的信息
add_help:是否添加帮助信息
prefix_chars:参数前缀,默认为-
fromfile_prefix_chars:前缀字符,放在文件名之前
argument_default:参数的全局默认值
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 Callablefrom functools import wrapsimport sys, argparsedef 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 SMTPfrom typing import Callablefrom functools import wrapsimport sys, argparsedef 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)
到此,相信大家对“python中argparse模块怎么使用”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341